使用 QPainter 绘图
Posted
技术标签:
【中文标题】使用 QPainter 绘图【英文标题】:Draw with QPainter 【发布时间】:2010-10-26 15:35:12 【问题描述】:我需要使用QPainter
进行绘图,但是当我尝试不这样做时
void paintEvent( QPaintEvent* )
我发现错误:
QPainter::setPen: Painter 未激活
QPainter::setBrush: Painter 未激活
我可以使用QPainter
not in void paintEvent( QPaintEvent* )
吗?
谢谢。
【问题讨论】:
【参考方案1】:您正在使用小部件作为QPainter
的绘制设备。在这种情况下,QPainter
通常只能在小部件的绘制事件的上下文中使用。 QPainter
documentation 对此有以下说法:
警告:当paintdevice是 小部件,只能使用 QPainter 在paintEvent() 函数内或在 paintEvent() 调用的函数;那 是除非 Qt::WA_PaintOutsidePaintEvent 小部件 属性已设置。在 Mac OS X 和 Windows,你只能在一个 paintEvent() 函数不管 此属性的设置。
通过为QPainter
设置另一个绘画设备,例如QPixmap
,可以在绘画事件之外使用QPainter
。
【讨论】:
我完全错过了这个问题中的“不”这个词:) 感谢您的回复。我可以用什么来从不同的方法中绘制小部件? 你不需要从不同的方法中提取。将任何用于绘图的代码放入paintEvent() 中。从不同的方法中,您可以通过调用 update() 来触发重绘。如果您需要在某些时候绘制不同的东西,请让您的其他方法修改一些在 paintEvent() 中使用的数据或标志,以更改事物的呈现方式。 例如,我的窗口中有 10 个矩形?它们是用 qpainter 绘制的。现在我想点击其中一个矩形,在这个矩形中必须画圆。 听起来图形视图框架可能比在小部件中绘图更适合您的需求。但是对于您的最后一个问题,您可以为每个矩形维护一个布尔列表或数组,当您确定其中一个被单击时,将该矩形的布尔设置为 true。在您的paintEvent() 中,在绘制每个矩形时查看每个布尔值,如果布尔值为真,则包含一个圆圈。以上是关于使用 QPainter 绘图的主要内容,如果未能解决你的问题,请参考以下文章