文本字段保持跟踪计数在QT使用QGraphicsScene
Text field keeping track of count in QT using QGraphicsScene
我有一个qt项目(使用c++),其中某个用户定义的QGraphicsItem
的实例称为Person
在场景中移动。有时这些Persons
相互作用,使其中一些改变颜色。
现在我想在窗口中放置一个文本字段,并显示每种颜色的数量。但是,由于更改发生在对Person::advance
-方法的调用中,所以我想创建一个可以从这些中更新的文本字段。
QGraphicsSimpleTextItem *text1 = new QGraphicsSimpleTextItem;
text1->setPos(-200, -150);
text1->setText("This is an arbitrary English sentence");
scene.addItem(text1);
,但我不知道如何访问和改变这个变量text1
的文本从Persons
的advance
-方法在我的场景。什么是好的策略呢?
我是否应该创建一个全局变量来跟踪计数,如果我这样做,我该如何更新文本字段?或者文本甚至不应该在我的
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));
}
您可以改进逻辑,但这只是一个基本示例。
相关文章:
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- QT C++使用 QGIS API 的应用程序
- Qt-使用信号和具有不同线程的插槽
- QT-使用内置翻译
- Qt - 使用λ函数修改先前连接信号的插槽参数
- QT:使用Qeventloop等待信号,如果信号发射得太早该怎么办
- QT C 使用功能模板中的约束
- QT:使用QVariant任意复杂的数据结构
- 如何从Qt使用密码访问Sqlite数据库
- Qt使用QWebEngine查找单词功能
- Qt:使用libxl兼容界面打开csv文件
- Qt:使用样式表将文本居中和左对齐
- QT:使用Inter Fields规则进行验证
- Qt 使用迭代器重载了 qtextstream 输出运算符
- Qt:使用QObject::connect指定多个连接类型
- Qt使用QRegularExpression多行选项
- Qt:使用一个连接从多个线程写入数据库
- QT:使用qcustomplot绘制ax^2+bx+c
- Qt使用ODBC驱动程序连接到XLSX文件
- Qt 5.1 使用 QSerialPort 的串行通信