gpt4 book ai didi

c++ - 使用 QGraphicsScene 在 QT 中跟踪计数的文本字段

转载 作者:行者123 更新时间:2023-11-28 06:15:37 25 4
gpt4 key购买 nike

我有一个 QT 项目(使用 C++),其中名为 Person 的某个用户定义的 QGraphicsItem 实例在场景中移动。有时,这些会互动,因此他们中的一些人会改变颜色。

现在我想在窗口中放置一个文本字段并显示每种颜色的数量。但是由于更改发生在对 Person::advance 方法的调用中,我想创建一个可以从其中更新的文本字段。

我可以通过将以下代码添加到我的 main.cpp 中轻松显示一些文本:

    QGraphicsSimpleTextItem *text1 = new QGraphicsSimpleTextItem;
text1->setPos(-200, -150);
text1->setText("This is an arbitrary English sentence");
scene.addItem(text1);

但我不知道如何从 advance 中的 Persons 方法访问和更改此变量 text1 的文本我的场景。什么是好的策略?

Should I create a global variable keeping track of the count, and if I do, how can I then update the text field? Or should the text not even be on my QGraphicsScene, but rather be defined in some other more appropriate place where it is callable from everywhere in the program? Is there a generic way of doing this?

最佳答案

你可以继承QGraphicsObject而不是 QGraphicsItem,这将允许您使用 Person 类中的信号。然后只需向计算项目的插槽发出信号并更改 text1 的文本。

我要做的是将您的图形 View 移动到新的 QWidget 类型类(如 QMainWindow )。这是为了更容易处理信号和槽,它也将允许您使用成员变量。它也比在 main.cpp 中做所有事情更干净。

您可以将 text1 变量作为此 MainWindow 类的成员变量。这将使访问变得容易。

MainWindow 类中的插槽可能如下所示:

MainWindow::countItems()
{
int redcount = 0;
int greencount = 0;
int bluecount = 0;
// iterate through your `Person` items and check their colors and count them
text1->setText(QString("Red items: %1, Green items: %2, Blue items: %3").arg(redcount).arg(greencount).arg(bluecount));
}

您可以改进逻辑,但这只是一个基本示例。

关于c++ - 使用 QGraphicsScene 在 QT 中跟踪计数的文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30391800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com