QGraphicsView不会在滚动事件上重画
|
QT 4.7
我有一个QGraphicsView / QGraphicsScene。该场景具有自定义QGraphicsItem,整个场景不会一次显示,因此具有视口。
我覆盖了QGraphicsItem的paint()方法,如下所示:
void paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
painter->setClipRect(option->exposedRect);
painter->save();
// Default identity matrix
QTransform transform;
// Apply some transform later
// The next line breaks stuff
painter->setTransform(transform);
// m_image is just a preloaded pixmap (i.e. watermark on all of these items).
painter->drawImage(QPoint(0,0), this->m_image);
painter->restore();
// Snip, do more drawing...
}
如果我曾经尝试在QPainter上设置setTransform(即,如果我尝试旋转项目),则视图将停止重新绘制场景,以响应用于平移的水平或垂直滚动条。当我放大或缩小时,视图也停止调整场景的大小。
如果我调整窗口大小或将窗口拖动到屏幕外然后重新显示在屏幕上,则视图将刷新。我一直在查看QPainter文档以及示例,但我不太清楚自己在做什么错。我假设这与坐标系有关。
没有找到相关结果
已邀请:
1 个回复
凰葱崎济邯
方法中的
已经对其进行了转换,其中考虑了视口属性(比例,旋转等)。当您在绘画方法中调用
时,您将全部消失。您可能想对现有转换执行矩阵运算,而不是创建一个新的矩阵运算。 因为您要在画家上调用
,然后尝试以完全不同的变换进行绘画,所以您在剪辑区域之外进行绘画,因此没有任何反应。 当您调整窗口大小或将窗口拖到屏幕外时,它可以工作,因为这会强制执行“重新绘制所有内容”,因此您的rect矩形将您的绘画区域包括在备用变换中。尽管我很惊讶它会出现在正确的位置。