gpt4 book ai didi

c++ - qt4 : call of update() on a single QGraphicsItem causes paint() on ALL QGraphicsItem

转载 作者:行者123 更新时间:2023-11-30 03:15:48 24 4
gpt4 key购买 nike

总结

我在SUSE 64位下使用qt 4.8.7

我有 2 个具有不同刷新率的 QGraphicsItem。但是当我对其中一个调用“update()”时,对它们两个都调用了“paint()”。所以两个项目的真实刷新率是两个刷新率的最大公因数。

我想独立调用 paint() 方法...我不知道这个问题来自哪里以及如何解决它(我试图调用 QGraphicsItem::update(QRectF(//item_dimensions//))"而不是 QGraphicsItem::update() 但问题是一样的)

简化代码

toto.hpp

class Toto : public QObject, QGraphicsItem
{

Q_OBJECT

public:
Toto(QString name)
{
m_name = name;
}

void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget* = NULL)
{
QTextStream(stdout) << "paint : " << m_name << endl;
//other stuff
}

public slots:
void updateSlot()
{
QTextStream(stdout) << "\nupdate : " << m_name << endl;
QGraphicsItem::update();
}


private:
QString m_name;
}

main.cpp

Toto1 = new Toto("toto_1");
Toto2 = new Toto("toto_2");

QTimer *timer1 = new QTimer(500);
QTimer *timer2 = new QTimer(2000);

connect(timer1, SIGNAL(timeout()), toto1, SLOT(updateSlot()));
connect(timer2, SIGNAL(timeout()), toto2, SLOT(updateSlot()));

timer1->start();
timer2->start();

预期输出:

toto_1 update
toto_1 paint

toto_1 update
toto_1 paint

toto_1 update
toto_1 paint

toto_1 update
toto_1 paint

toto_2 update
toto_2 paint

toto_1 updated every 500ms, toto_2 updated every 2000ms

我得到的:

toto_1 update
toto_1 paint
toto_2 paint

toto_1 update
toto_1 paint
toto_2 paint

toto_1 update
toto_1 paint
toto_2 paint

toto_1 update
toto_1 paint
toto_2 paint

toto_2 update
toto_1 paint
toto_2 paint

toto_1 and toto_2 both updated every 500ms

感谢您的帮助!

最佳答案

我不确定这是否是问题所在,因为我没有所有信息,但您可能是 QGraphicsItem::update() 方法中记录的副作用的受害者,即:

As a side effect of the item being repainted, other items that overlap the area rect may also be repainted.

这是 Qt4 文档中有关 QGraphicsItem::update() 的引述,您可以自己查看 here .

关于c++ - qt4 : call of update() on a single QGraphicsItem causes paint() on ALL QGraphicsItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56767721/

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