c++ - QPainter 保存状态

标签 c++ linux qt qwidget qpainter

我有一个 QWidget,我在其中使用 QPainter 对象绘制一些点,但是当调用 update() 方法时,QWidget 的绘制被完全清除。有什么方法可以保存实际状态并只添加点,或者我必须保存每个点并在每次 paintEvent() 调用中绘制它们?基本上,当我按下一个箭头时,我必须在 QWidget 上显示一条线(用于汽车拉力赛)。

最佳答案

除了 SingerOfTheFall 的回答之外,您还可以将所有增量更改绘制到图像中,然后仅在每次更新调用时绘制该图像。

为了处理图像,Qt 有很多类,最重要的是 QImageQPixmap由于它们都是从 QPaintDevice 派生的,因此可以使用 QPainter 直接绘制它们。 QImage 针对直接像素访问和文件 I/O 进行了优化,而 QPixmap 针对在屏幕上显示进行了优化。它没有说哪个更适合绘图,但我会从 QPixmap 开始,看看它的表现如何。

您还可以在另一个“图像”类中绘图,QPicture .但这并不是真正存储渲染结果的图像,而只是记录使用 QPainter 完成的绘制命令,以便稍后轻松回放。因此我认为它的性能应该不会比“真实”图像好多少。但这可能值得一试,特别是如果绘图中涉及更多内容并且仅存储最终图像是不够的。

关于c++ - QPainter 保存状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12740848/

相关文章:

c++ - 从 const std::string 转换为 std::string& 的错误 C2664

python - 如何编译多个 C++ 文件以将它们与 Python ctypes 一起使用?

mysql - 如何更改或设置 "Passenger Pool Idle Time"?

Linux 根据文件名提示更改文件内的内容

c++ - Q文件对话框 : folder name appears twice under windows

c++ - 在 QPlainTextEdit 中通过 Ctrl+Wheel 启用文本缩放

c++ - Windows 上的 Qt QMYSQL "Driver not loaded"

c++ - QImage:使用颜色表从灰度转换为 RGB

c++ - boost::signal 库不工作

linux - 如何在Linux(Fedora)上调试ELF加载过程?