Qt:强制QGraphicsItem更新

4
根据Qt文档"void QGraphicsItem::update ( const QRectF & rect = QRectF() ) "不会立即进行绘制,而是在控制达到事件循环后由QGraphicsView处理绘制请求。以下是我的代码:
this->item->setPixmap( QPixmap::fromImage(*coloration->image) );// QGraphicsPixmapItem 
this->item->update();
this->scene->update(); // QGraphicsScene
this->view->update(); // QGraphicsView

代码在一个每100毫秒调用一次的方法中(并且其中颜色- > 图像将会改变),但是Qt拒绝每100毫秒更新图像,它只呈现最终图像。那么,我该如何立即绘制该项


在处理图像时,您是否将控制权交给事件循环? - graphite
@graphite 我已经测试了qApp->processEvents(),但它没有起作用。并且在控制台模式下,我发现绘图函数并未被调用! - JavaBeta
4
谢谢您的回复!我发现重新绘制视口就可以完成任务了!因此,在该方法中,只需调用this->item->setPixmap(QPixmap::fromImage(*coloration->image)); this->view->viewport()->repaint(); - JavaBeta
每100毫秒调用scene->update()和view->update()将非常低效。item->update()应该足够了。(如果不行,那么item的实现中可能存在错误) - Frank Osterfeld
1
@JavaBeta非常感谢你花了这么多时间在这个问题上。并且它是viewport(视口)的问题。我认为你应该将其编写为答案,并且为读者接受它。 - Kadir Erdem Demir
显示剩余2条评论
3个回答

1
这对我有用: ui->graphicsView->viewport()->repaint();

0

添加额外的用法

#include <QGraphicsView> 
QGraphicsView *view = scene()->views().first();
view->viewport()->repaint();

0

你必须在阻塞事件循环,或者你的项目实现存在问题。我无法复现你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接