1 (10.12.2014 21:09:43 отредактировано Peter)

Здравствуйте!

После переноса программы с Qt4 на Qt5 в ней перестал вызываться paintEvent во внутреннем виджете.
Я попробую описать ситуацию словами, как общий случай.
Именно, кроме главного виджета, наследующего QMainWindow, есть ещё программный модуль с классом,
наследующим QWidget, в котором есть свой paintEvent. В нём отрисовываются jpg по мере их готовности.
В главном виджете создаётся экземпляр этого класса с указанием себя как родительского, т.е. this.
Дальше все как обычно, в paintEvent он функцией show выводится на экран, а картинки в нём
меняются в этом экземпляре в его paintEvent и оказываются на экране без участия главного виджета.

После переноса программы на Qt5 это перестало работать. Как оказалось, в этом экземпляре
перестал вызываться его paintEvent по сигналу update, но всё остальное работает.
Место на экране для этого виджета остаётся чёрным.
Если создавать экземпляр этого класса без родительского, то paintEvent вызывается, место на экране
затирается функцией erase во внутреннем paintEvent, но картинки не появляются, хотя то место во
внутреннем painEvent, где они выводятся функцией drawImage, проходится.

М.б., кто-нибудь знает, как это делается в Qt5? У меня пока не получается.

Пётр.

Ещё не сказал, что флаги для внутреннего виджета установлены какие надо.

Пётр.

2

Оказалось, что в дочернем виджете нельзя было устанавливать атрибут WA_PaintOnScreen.
Возможно, что система воспринимает это как попытку рисовать в this главного виджета,
что запрещено. Также потребовалось установить атрибут WA_OpaquePaintEvent,
он устраняет мелькание.

Пётр.

Пётр.