我目前正在开发一个小型矢量绘图程序,您可以在其中创建线条并在创建后对其进行修改(这些线条基于自定义 QGraphicsItem)。例如,下图显示了当线条的最左侧(标记为黄色)点被拖动到屏幕右侧时会发生什么,有效地延长了线条:
缓慢移动该点时一切正常,但是,当快速移动时,会出现一些视觉伪影:
我用来调用重绘的代码位于mouseMoveEvent
redefined 方法中,该方法包含以下代码行:
QRectF br = boundingRect();
x2 = static_cast<int>(event->scenePos().x()-x());
y2 = static_cast<int>(event->scenePos().y()-y());
update(br);
我的定义显然没有问题,boundingRect
因为添加方法表明:painter->drawRect(boundingRect())
paint
并且当线简单地移动(设置标志)时也没有问题QGraphicsItem::ItemIsMovable
,即使是快速移动。
有谁知道这里发生了什么?我的猜测是update
不会立即调用,因此mouseMoveEvent
可以在重绘发生之前多次调用,也许会取消以前的调用?我不知道。
当然,简单的解决方法是将QGraphicsView
持有线的对象的视口模式设置为QGraphicsView::FullViewportUpdate)
,但这很难看(而且很慢)。