Qt C++绘图与动画
Qt C++ Drawing and Animation
我是Qt的新手。我想有一个方法来解决这个问题。我想画一个道路网络,在整个程序执行过程中保持不变。在这个路网上,我想画一辆车(一个简单的圆形或矩形就足够了),它在这个路网中从起点到终点移动。
我开始在一个小部件上画画。我画了道路(使用多边形),到目前为止看起来还可以。
Q1)我现在如何绘制另一个可以移动的对象(汽车)?
我知道我需要重新油漆了。即,我在小部件中定义的绘制函数将根据我为重新绘制设置的某个计时器被一次又一次地调用。当收到此事件时,我的车的位置会发生变化。整个场景被重新绘制。我说得对吗?
Q2)我如何将道路网络视为一个独立的元素,将汽车视为独立的元素?例如,像两个单独的小部件,这样我只向我的(例如汽车类)发送重新喷漆事件
Q3)我正在使用QPainter和QWidget类。使用QGraphicsScene这样做更好吗?我能看到任何教程或示例代码吗?
您应该明确使用QGraphicsScene
来放置QGraphicsObject
。这将使你能够更好地控制事物应该如何绘制。
您可以创建自定义QGraphicsObject
并编写paint
方法,该方法将定义对象应该如何绘制——在这里,您可以实现绘制汽车或道路网络的行为。至于教程,浏览QtCreator中包含的教程,你会发现。
使用QGraphicsScene
和QGraphicsView
来显示图片。它自动执行所有绘图和重新绘制。它比在小部件上进行自定义绘图更方便(在某些情况下也更高效)。此外,它会单独处理对象,您可以独立移动它们。
使用QGraphicsScene::addPolygon
和类似方法添加道路。使用QGraphicsScene::addPixmap
添加汽车。使用QGraphicsItemAnimation
设置汽车动画。
文档(包括示例):
- QGraphicsItemAnimation
- 图形视图框架
- 动画框架示例
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 使用 GLUT 使用键停止动画?
- 使用对象数组对 SFML 进行动画处理
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 如何减慢从 BVH 文件读取的 opengl 动画?
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- 从精灵表在 sfml 中为精灵制作动画
- GTKMM:拍摄绘图区域的屏幕截图?
- Qt3D 骨骼动画
- GTKMM:如何将键盘事件附加到绘图区域?
- ASCII 旋转光标 (TUI) 动画出现问题
- 带有 std::cout 的多线程控制台文本动画
- 有没有办法像动画一样移动控制台窗口?
- 围绕特定轴对 qt3d 旋转进行动画处理
- OpenGL:使用实例化绘图与我正在绘制的帧缓冲进行绘制
- 为什么在我释放左键单击后,我的绘图会消失
- 如何在Qt中设置围绕固定点的线的动画
- 试图用c++制作一个动画加载圈
- 精灵动画查看器应该使用哪些Qt小部件
- Qt C++绘图与动画