呼叫开始时QPainter失败

时间:2010-01-20 14:50:32

标签: c++ qt qpainter qpixmap

我正在尝试在QsplashScreen上绘制PNG文件。 我试图通过QPainter来做。我之所以想要通过QPainter这样做是因为我希望它能够平滑地最小化(直到它消失),当我只是在修复它时它看起来并不顺利。

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

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

2 个答案:

答案 0 :(得分:5)

您想要创建QSplashScreen的子类并重新实现drawContents。请参阅docs

使用他们给你的画家,你应该没事。

答案 1 :(得分:0)

特别是关于使用QPainterbegin方法的文档明确指出一次只有一个画家可以在给定的绘图设备上活动,并且使用构造函数版本{ {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(); 的工作原理。您几乎应该始终使用将设备传递给构造函数的版本,而不需要调用QPainterbegin。 (有时,您可能会长时间保留画家,并特别使用endbegin - 在这种情况下,您不应该将其初始化为设备。)