[英]Text field keeping track of count in QT using QGraphicsScene
我有一个QT项目(使用C ++),其中某个名为Person
用户定义QGraphicsItem
实例在场景中移动。 有时这些Persons
互动,以使其中一些人变色。
现在,我想在窗口中放置一个文本字段,并显示每种颜色的数量。 但是由于更改发生在对Person::advance
-method的调用内,所以我想创建一个文本字段,可以从这些字段中进行更新。
通过将以下代码添加到main.cpp中,我可以轻松显示一些文本:
QGraphicsSimpleTextItem *text1 = new QGraphicsSimpleTextItem;
text1->setPos(-200, -150);
text1->setText("This is an arbitrary English sentence");
scene.addItem(text1);
但我不知道如何从场景中“ Persons
的“ advance
方法中访问和更改此变量text1
的文本。 有什么好的策略呢?
我是否应该创建一个全局变量来跟踪计数,如果这样做,该如何更新文本字段? 还是该文本甚至不应该在我的
QGraphicsScene
,而是应该在可以从程序中任何地方调用的其他更合适的位置定义? 有通用的方法可以做到这一点吗?
您可以子类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));
}
您可以改善逻辑,但这只是一个基本示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.