Сбой QPainter при начале вызова - PullRequest
0 голосов
/ 20 января 2010

Я пытаюсь нарисовать файл PNG на QsplashScreen. Я пытаюсь сделать это через QPainter. Причина, по которой я хочу сделать это с помощью QPainter, заключается в том, что я хочу, чтобы оно плавно минимизировалось (до тех пор, пока оно не исчезло), когда я просто возвращаю его обратно, оно совсем не выглядит гладким.

Я передал QSplashScreen конструктору QPainter. Когда я вызываю begin () в QPainter с параметром QSplashScreen в качестве параметра, он не срабатывает при утверждении d->active. То же самое происходит, когда я поставляю Qpixmap.

Что я делаю не так? Как мне начать QPainter begin ()?

Ответы [ 2 ]

5 голосов
/ 20 января 2010

Вы хотите создать подкласс QSplashScreen и повторно реализовать drawContents. См. документы .

Используйте маляра, которого они вам дают, и с вами все будет в порядке.

0 голосов
/ 20 января 2010

В частности, при использовании 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 на нем - в этом случае вам не следует инициализировать его на устройстве.)

...