Название: Баг отрисовки в QTreeWidget Отправлено: andrew.k от Октябрь 02, 2014, 15:56 Прилагаю во вложении очень простой тестовый проект, который воспроизводит баг.
Прошу у кого есть возможность, проверить на вашей системе и сообщить, подтверждается ли баг, какая система и версия Qt. Воспроизводится баг так. 1. Запускаем 2. Ставим чек-бокс (заполняется виджет) 3. Выделяем любой элемент (щелкаем) 4. снимаем чек-бокс. Получаем баг: тривиджет не перерисовался, по щелчку либо, ресайзу, либо перетащить окно можно, в общем любая перерисовка приводит к коректной отрисовке - виджет обновляется. Если пропустить п.3 (т.е. не выделять элемент) баг не наблюдается. Если выделять баг повторяется многократно. Вот основной код тестового проекта, смотреть в общем нечего. Установлен ресайз по содержимому. Он видимо и является источником проблемы. Потому как без него все работает как надо. Код
Название: Re: Баг отрисовки в QTreeWidget Отправлено: Dimas от Октябрь 02, 2014, 17:13 Надо так:
Код тогда работает Название: Re: Баг отрисовки в QTreeWidget Отправлено: andrew.k от Октябрь 02, 2014, 17:20 Надо так: Не правда. Одинаково не работает.Код тогда работает Название: Re: Баг отрисовки в QTreeWidget Отправлено: Dimas от Октябрь 02, 2014, 17:31 на Windows XP SP3, QT 4.8.1 работает с clicked и не работает с toggled
гы, правда, правда, вот так: http://youtu.be/k81bEojSD-c (http://youtu.be/k81bEojSD-c) Название: Re: Баг отрисовки в QTreeWidget Отправлено: OKTA от Октябрь 02, 2014, 17:43 На Win 7, Qt 4.7.4 аналогично!
Название: Re: Баг отрисовки в QTreeWidget Отправлено: kambala от Октябрь 02, 2014, 17:44 замени ui->treeWidget->clear(); на
Код и будет работать. тестил в 5.3.1 и 4.8.5 в 8.1 пришлось еще и ошибки в проекте фиксить чтобы скомпилить его :( Название: Re: Баг отрисовки в QTreeWidget Отправлено: OKTA от Октябрь 02, 2014, 17:53 Только интересно в чем прикол clicked vs toggled :)
Название: Re: Баг отрисовки в QTreeWidget Отправлено: kambala от Октябрь 02, 2014, 17:58 похоже как-то с циклом событий связано. добавление qApp->processEvents(); после ui->treeWidget->clear(); фиксит поведение и с toggled.
Название: Re: Баг отрисовки в QTreeWidget Отправлено: andrew.k от Октябрь 02, 2014, 18:54 на Windows XP SP3, QT 4.8.1 работает с clicked и не работает с toggled Теперь верю, спс за видос)гы, правда, правда, вот так: http://youtu.be/k81bEojSD-c (http://youtu.be/k81bEojSD-c) У меня не работает с обоими сигналами. Название: Re: Баг отрисовки в QTreeWidget Отправлено: andrew.k от Октябрь 02, 2014, 18:56 похоже как-то с циклом событий связано. добавление qApp->processEvents(); после ui->treeWidget->clear(); фиксит поведение и с toggled. При этом если qApp->processEvents() добавить в конце слота (уже после создания новых элементов), то не помогает.Название: Re: Баг отрисовки в QTreeWidget Отправлено: kambala от Октябрь 02, 2014, 18:59 ну это логично по-моему :)
Название: Re: Баг отрисовки в QTreeWidget Отправлено: andrew.k от Октябрь 03, 2014, 13:37 ну это логично по-моему :) Логично было бы, если работало в любом месте.А так получается баг не в очереди событий. Либо он какой-то комплексный. Например, если новые элементы отличаются по размеру, то все отлично работает. Если по размеру не отличаются, то не происходит ресайза колонок и отсюда нет обновления. Как следствие, понятно, что ручной ресайз тоже решает проблему. |