繁体   English   中英

调用开始时QPainter失败

[英]QPainter fails when calling begin

我正在尝试在QsplashScreen上绘制PNG文件。 我正在尝试通过QPainter做到这一点。 我想通过QPainter进行此操作的原因是因为我希望其平滑地最小化(直到消失),当我重新对其进行修补时,它看起来一点也不平滑。

我将QSplashScreen传递给QPainter构造函数。 当我使用QSplashScreen作为参数在QPainter调用begin()时,它在断言d->active上失败。 当我提供Qpixmap时,它以相同的方式发生。

我究竟做错了什么? 我应该如何启动QPainter的begin()?

您要创建QSplashScreen的子类并重新实现drawContents 请参阅文档

使用他们给您的画家,您会没事的。

特别是关于使用QPainterbegin方法的文档清楚地指出,一次只能在给定的绘画设备上激活一个绘画者,并且使用QPainter的构造函数版本会自动调用您传入的值。如果您按照问题中的描述进行操作,例如:

QWidget *widget( ... );

QPainter painter( widget );
painter.begin( widget ); // <-- error, we already have a painter active on that paint device (our own).
// Do stuff...
painter.end();

Qt可能应该先关闭设备,然后再打开新设备,但是上面的代码意味着您不完全了解QPainter工作原理。 您几乎应该始终使用将设备传递给构造函数的版本,并且永远不需要调用beginend (有时,您可能需要长时间保留绘画者,并且特别要在其上使用beginend -在这种情况下,您不应该将其初始化到设备上。)

暂无
暂无

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

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