gpt4 book ai didi

c++ - Qt- 移动 QGraphicsItem 会导致伪影。留下痕迹

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

当我移动一个 QGraphicsItem 时,奇怪的工件留在后面。项目的某些部分不渲染,其他渲染...在 note.cpp 中我有一个形状

QPainterPath Note::shape()const{
QPainterPath path;
// path.addRect(0, 0, 50, 20);
path.moveTo(0, -80.0);
path.lineTo(0.0, 80.0);
path.lineTo(80.0, 0.0);
// path.lineTo(75.0, -30.0);
path.closeSubpath();
return path;
}

在画图函数中

QPointF *points = new QPointF[3];
points[0] = QPointF(0,-80);
points[1] = QPointF(0,80);
points[2] = QPointF(80,0);
painter->drawPolygon(points,3);

enter image description here enter image description here第一张图片显示当我启动应用程序时一切正常。第二张图片显示,当我用鼠标移动一个三角形时,它被切成薄片。其他时候它会留下一些痕迹并且不会渲染三角形的所有部分这是该项目的 github 链接。 Github link

要重现,只需移动一个三角形。

最佳答案

QGraphicsItem 为了提高效率只重绘返回 boundingRect() 方法的部分,在你的例子中是 QRect(0, 0, 80, 80) 由于坐标 (0, -80) 位于 boundingRect 之外,因此仅返回必要区域的一半。解决方案是:

QRectF Note::boundingRect() const {
return QRectF(0, -80, 80, 160) ;
// or
// return shape().boundingRect();
}

关于c++ - Qt- 移动 QGraphicsItem 会导致伪影。留下痕迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56259690/

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