【发布时间】:2013-10-23 16:41:46
【问题描述】:
所以, 我在我定义的区域中绘制了一个 QPolygonF。该区域继承自 QGraphicsView。
我想要做的是让用户在 QPolygonF 的控制点周围移动,并在多边形创建后改变它。我真的找不到关于如何做到这一点的参考资料。
由于我画线来闭合并表示多边形,并且在可绘制区域中可以有更多的东西,清除它并一遍又一遍地绘制它似乎不正确。
有谁知道我该如何解决这个问题?
谢谢!
【问题讨论】:
所以, 我在我定义的区域中绘制了一个 QPolygonF。该区域继承自 QGraphicsView。
我想要做的是让用户在 QPolygonF 的控制点周围移动,并在多边形创建后改变它。我真的找不到关于如何做到这一点的参考资料。
由于我画线来闭合并表示多边形,并且在可绘制区域中可以有更多的东西,清除它并一遍又一遍地绘制它似乎不正确。
有谁知道我该如何解决这个问题?
谢谢!
【问题讨论】:
我有点困惑为什么你描述你的“区域”继承自 QGraphicsView,然后讨论 QPolygonF。如果您使用的是 QGraphicsView,这意味着您有一个 QGraphicsScene 并且将使用 QGraphicsPolygonItem。
但是,假设 QGraphicsView 在这里无关紧要,QPolygonF 只是一个从点向量继承的类; QVector。
您应该能够遍历这些点并将它们移动到您想要的任何位置。你可以得到一个这样的观点:-
QPolygonF poly; // assume it has been given a number of points
QPointF& point = poly[index]; // where index is the index into the QVector of points
然后你可以移动点:-
point.SetX(xPos);
point.SetY(yPos);
在移动点时重绘项目应该不是问题。
【讨论】:
清除它并重新绘制整个场景可能是最有效的方法。唯一的其他选择是在多边形更改时尝试计算多边形的最小边界矩形并尝试仅使该区域无效,但这实际上是同一件事。 Qt 绘图速度非常快,尤其是当您利用 opengl 集成时。当我开始担心重绘整个场景时,我提醒自己电子游戏一直都在这样做。 :P
【讨论】: