Qt C++绘图与动画

Qt C++ Drawing and Animation

本文关键字:动画 绘图 C++ Qt      更新时间:2023-10-16

我是Qt的新手。我想有一个方法来解决这个问题。我想画一个道路网络,在整个程序执行过程中保持不变。在这个路网上,我想画一辆车(一个简单的圆形或矩形就足够了),它在这个路网中从起点到终点移动。

我开始在一个小部件上画画。我画了道路(使用多边形),到目前为止看起来还可以。

Q1)我现在如何绘制另一个可以移动的对象(汽车)?

我知道我需要重新油漆了。即,我在小部件中定义的绘制函数将根据我为重新绘制设置的某个计时器被一次又一次地调用。当收到此事件时,我的车的位置会发生变化。整个场景被重新绘制。我说得对吗?

Q2)我如何将道路网络视为一个独立的元素,将汽车视为独立的元素?例如,像两个单独的小部件,这样我只向我的(例如汽车类)发送重新喷漆事件

Q3)我正在使用QPainter和QWidget类。使用QGraphicsScene这样做更好吗?我能看到任何教程或示例代码吗?

您应该明确使用QGraphicsScene来放置QGraphicsObject。这将使你能够更好地控制事物应该如何绘制。

您可以创建自定义QGraphicsObject并编写paint方法,该方法将定义对象应该如何绘制——在这里,您可以实现绘制汽车或道路网络的行为。至于教程,浏览QtCreator中包含的教程,你会发现。

使用QGraphicsSceneQGraphicsView来显示图片。它自动执行所有绘图和重新绘制。它比在小部件上进行自定义绘图更方便(在某些情况下也更高效)。此外,它会单独处理对象,您可以独立移动它们。

使用QGraphicsScene::addPolygon和类似方法添加道路。使用QGraphicsScene::addPixmap添加汽车。使用QGraphicsItemAnimation设置汽车动画。

文档(包括示例):

  • QGraphicsItemAnimation
  • 图形视图框架
  • 动画框架示例