QWidget не обновляется / перерисовывается последовательно - PullRequest
0 голосов
/ 12 августа 2011

Я создаю CAD-подобное приложение, когда выбор объекта в окне просмотра изменяется, и выдается сигнал, содержащий QHash новых объектов. Этот сигнал перехватывается его подокном документа, которое выводит из них новый пользовательский интерфейс свойств / настроек, уничтожает отображение существующих свойств на главной панели свойств окна и заменяет их новыми свойствами / настройками.

Используя операторы print, я знаю, что это работает - все соединения сигнал / слот срабатывают правильно. Однако виджеты свойств очень непоследовательно перерисовываются, если я выполняю операцию непосредственно в главном окне (нажмите кнопку, наведите курсор мыши на виджет), обновляются виджеты, о которых идет речь. Но когда я просто выбираю объекты в области просмотра, панель свойств «пропускает» обновление, поэтому в конечном итоге отображаются свойства предыдущего объекта - я знаю, что это не проблема с моей стороны, потому что, если я перемещаю окно или взаимодействую с виджеты (чтобы вызвать перерисовку), виджеты волшебным образом становятся правильными.

Эти функции не вызываются из отдельных потоков. Если я вручную вызываю update () в моем коде, ничего не меняется. Если я вызываю repaint () напрямую (я знаю, что не должен), это работает немного лучше, но немного нестабильно - иногда виджеты вообще не отрисовываются.

У кого-нибудь был подобный опыт?

1 Ответ

2 голосов
/ 12 августа 2011

Вы пробовали использовать статическую функцию QApplication :: processEvents () ?

Вы можете захотеть сделать QApplication :: processEvents (QEventLoop :: ExcludeUserInputEvents), это предотвращает приложение отобработка нажатия мыши или клавиши до того, как processEvents вернется к вызывающей стороне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...