繁体   English   中英

如何仅在特定事件之后使用 QPainter 进行绘画?

[英]How to paint with QPainter only after a specific event?

我有一个主 window 上面有一些小部件,每个小部件都需要自己的图形。 我想使用 QPainter 在它们上绘制形状、线条等,但只能在特定事件之后,比如按下按钮。

问题是,如果我只是在任何 function 中创建 QPainter,它将无法正常工作:

QPainter::setPen: Painter not active

QPainter 方法只能在paintEvent(QPaintEvent *) function 内部调用:这会引发以下问题:

  1. 我必须为我想要绘制的所有小部件派生我的自定义类,所以我不能使用设计器来放置我的小部件。 使用大量小部件可能会令人沮丧。

  2. 小部件在 window 的每个绘制事件之后重新绘制自己,例如移动它,或移动它前面的其他 windows。 我在这些小部件中做了很多绘图,所以在这些情况下它们会明显闪烁。

有没有更好更简单的方法来解决这个问题? 我开始考虑只显示图像,并仅在按下特定按钮时重新制造这些图像。 我怀疑这是最优雅的解决方案......

您可以在设计器中使用自定义小部件:为 Qt 设计器创建自定义小部件

Qt Designer 基于插件的体系结构允许编辑用户定义和第三方自定义小部件,就像使用标准 Qt 小部件一样。

对于第二个问题,其中一种方法是为每个小部件创建一个QPixmap 当您的小部件的外观需要更改时,您可以绘制该像素图(使用QPainter的构造函数,该构造函数采用QPaintDevice - QPixmapQPaintDevice )。

在您的小部件的paintEvent function 中,您只需使用该“缓存”像素图填充您的小部件。 这样,您只在实际需要时才进行(可能很昂贵)的绘画。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM