我在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每500毫秒更新一次,toto_2每2000毫秒更新一次
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和toto_2均每500毫秒更新一次
谢谢您的帮助!
答案 0 :(得分:2)
我不确定这是否是问题,因为我没有所有信息,但是您可能是QGraphicsItem :: update()方法中记录的副作用的受害者,即:
作为重新粉刷物品的副作用,与区域 rect 重叠的其他物品也可能被粉刷。
这是Qt4文档中有关QGraphicsItem :: update()的引文,您可以自己检查here。
答案 1 :(得分:0)
我找到了解决方案! 我只是简单地添加了“ setCacheMode(QGraphicsItem :: DeviceCoordinateCache);”,默认值曾经是“ QGraphicsItem :: NoCache”