0

我正在尝试在 QsplashScreen 上绘制 PNG 文件。我试图通过QPainter. 我想通过它做的原因QPainter是因为我希望它平滑地最小化(直到它消失),当我只是修复它时,它看起来一点也不平滑。

我将 传递QSplashScreenQPainter构造函数。当我以参数为参数调用 begin() 时,它在QPainterassertQSplashScreen上失败d->active。当我提供时,它以同样的方式发生Qpixmap

我究竟做错了什么?我应该如何启动QPainter'开始()?

4

2 回答 2

5

您想创建一个子类QSplashScreen并重新实现drawContents. 请参阅文档

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

于 2010-01-20T15:13:23.353 回答
0

特别是关于 using 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工作的。您应该几乎总是使用将设备传递给构造函数的版本,并且永远不需要调用beginor end。(有时,您可能会长时间使用 Painter,并专门使用beginend- 在这种情况下,您不应该将其初始化为设备。)

于 2010-01-20T19:19:39.247 回答