我有一个 QWidget,我在其中使用 QPainter 对象绘制一些点,但是当调用 update() 方法时,QWidget 的绘制被完全清除。有什么方法可以保存实际状态并只添加点,或者我必须保存每个点并在每次 paintEvent() 调用中绘制它们?基本上,当我按下一个箭头时,我必须在 QWidget 上显示一条线(用于汽车拉力赛)。
最佳答案
除了 SingerOfTheFall 的回答之外,您还可以将所有增量更改绘制到图像中,然后仅在每次更新调用时绘制该图像。
为了处理图像,Qt 有很多类,最重要的是 QImage
和 QPixmap
由于它们都是从 QPaintDevice
派生的,因此可以使用 QPainter
直接绘制它们。 QImage
针对直接像素访问和文件 I/O 进行了优化,而 QPixmap
针对在屏幕上显示进行了优化。它没有说哪个更适合绘图,但我会从 QPixmap
开始,看看它的表现如何。
您还可以在另一个“图像”类中绘图,QPicture
.但这并不是真正存储渲染结果的图像,而只是记录使用 QPainter
完成的绘制命令,以便稍后轻松回放。因此我认为它的性能应该不会比“真实”图像好多少。但这可能值得一试,特别是如果绘图中涉及更多内容并且仅存储最终图像是不够的。
关于c++ - QPainter 保存状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12740848/