我正在尝试在QsplashScreen上绘制PNG文件。
我试图通过QPainter
来做。我之所以想要通过QPainter
这样做是因为我希望它能够平滑地最小化(直到它消失),当我只是在修复它时它看起来并不顺利。
我将QSplashScreen
传递给QPainter
构造函数。当我使用QPainter
作为参数调用QSplashScreen
中的begin()时,它会在断言d->active
上失败。当我提供Qpixmap
时,它会以同样的方式发生。
我做错了什么?我该如何启动QPainter
的begin()?
答案 0 :(得分:5)
您想要创建QSplashScreen
的子类并重新实现drawContents
。请参阅docs。
使用他们给你的画家,你应该没事。
答案 1 :(得分:0)
特别是关于使用QPainter
,begin
方法的文档明确指出一次只有一个画家可以在给定的绘图设备上活动,并且使用构造函数版本{ {1}}会自动为您传入的值调用begin。因此,如果您按照问题中的说明进行操作,请执行以下操作:
QPainter
Qt应该首先关闭设备,然后打开新设备,但是上面的代码意味着你并不完全理解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();
的工作原理。您几乎应该始终使用将设备传递给构造函数的版本,而不需要调用QPainter
或begin
。 (有时,您可能会长时间保留画家,并特别使用end
和begin
- 在这种情况下,您不应该将其初始化为设备。)