[英]QPainter fails when calling begin
我正在尝试在QsplashScreen上绘制PNG文件。 我正在尝试通过QPainter
做到这一点。 我想通过QPainter
进行此操作的原因是因为我希望其平滑地最小化(直到消失),当我重新对其进行修补时,它看起来一点也不平滑。
我将QSplashScreen
传递给QPainter
构造函数。 当我使用QSplashScreen
作为参数在QPainter
调用begin()时,它在断言d->active
上失败。 当我提供Qpixmap
时,它以相同的方式发生。
我究竟做错了什么? 我应该如何启动QPainter
的begin()?
您要创建QSplashScreen
的子类并重新实现drawContents
。 请参阅文档 。
使用他们给您的画家,您会没事的。
特别是关于使用QPainter
, begin
方法的文档清楚地指出,一次只能在给定的绘画设备上激活一个绘画者,并且使用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
工作原理。 您几乎应该始终使用将设备传递给构造函数的版本,并且永远不需要调用begin
或end
。 (有时,您可能需要长时间保留绘画者,并且特别要在其上使用begin
和end
-在这种情况下,您不应该将其初始化到设备上。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.