繁体   English   中英

文本字段使用QGraphicsScene跟踪QT中的计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM