我们需要知道更多,什么不会发生?窗口是否出现?线条没有绘制?同时尝试这个示例代码,如果你想:)编辑:更新显示更新。
#include ...
class QUpdatingPathItem : public QGraphicsPathItem {
void advance(int phase) {
if (phase == 0)
return;
int x = abs(rand()) % 100;
int y = abs(rand()) % 100;
QPainterPath p = path();
p.lineTo(x, y);
setPath(p);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene s;
QGraphicsView v(&s);
QUpdatingPathItem item;
item.setPen(QPen(QColor("red")));
s.addItem(&item);
v.show();
QTimer *timer = new QTimer(&s);
timer->connect(timer, SIGNAL(timeout()), &s, SLOT(advance()));
timer->start(1000);
return a.exec();
}
你应该得到这样的事情:
的路径在任何QGraphicsPathItem
当然可以稍后进行更新。你可能想保持原来的画家路某处,以免造成所有路径复制性能命中(我不知道如果QPainterPath是隐含共享...)
QPainterPath p = gPath.path();
p.lineTo(0, 42);
gPath.setPath(p);
动画
看来,你正在尝试做某种动画/即时更新。在Qt中有这个完整的框架。在最简单的形式中,您可以继承QGraphicsPathItem的子类,重新实现其advance()插槽以自动从运动中获取下一个点。剩下的唯一事情就是用所需的频率调用s.advance()。
http://doc.trolltech.com/4.5/qgraphicsscene.html#advance
请张贴相关的片段,这将有助于我们理解你到目前为止做了什么。 – 2009-07-23 18:15:42