我有一个QT项目(使用C ++),其中某个用户定义的QGraphicsItem
的实例称为Person
在场景中移动。有时候那些Persons
会相互作用,以便其中一些会改变颜色。
现在我想在窗口中放置一个文本字段,并显示每种颜色的数量。但由于更改发生在对Person::advance
- 方法的调用中,我想创建一个可以在这些内容中更新的文本字段。
我可以通过将以下代码添加到main.cpp来轻松显示一些文本:
QGraphicsSimpleTextItem *text1 = new QGraphicsSimpleTextItem;
text1->setPos(-200, -150);
text1->setText("This is an arbitrary English sentence");
scene.addItem(text1);
但我不知道如何从我场景中text1
的{{1}} - 方法中访问和更改此变量advance
的文本。对此有什么好的策略?
我是否应该创建一个跟踪计数的全局变量,如果我这样做,我该如何更新文本字段?或者文本甚至不应该在我的
Persons
上,而是在其他更适合的地方定义,它可以在程序的任何地方调用?是否有通用的方法来做到这一点?
答案 0 :(得分:1)
您可以继承QGraphicsObject
而不是QGraphicsItem
,这样您就可以使用Person类中的信号。然后只是向一个插槽发出信号,该插槽对项目进行计数并更改text1的文本。
我要做的是将图形视图移动到新的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));
}
你可以改进逻辑,但这只是一个基本的例子。