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