Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: cheqa от Октябрь 01, 2013, 10:35



Название: Контролы не отрисовывают новые значения
Отправлено: cheqa от Октябрь 01, 2013, 10:35
Доброго дня.
Разрешите разбавить ваш день порцией первостатейного бреда.

Наблюдается следующая картина.
Есть контрол, содержащий прогресс бар и несколько кнопок. Есть алгоритм QConcurrentMap, который с помощью QFutureWatcher периодически рапортует об обработке очередного элемента. Есть слот, который привязан к QFutureWatcher, в котором происходит, в частности, вызов progressBar->setValue (minimum и maximum установлены корректно). Все контролы заэнаблины, видимы, начальные значения отображаются корректно (специально до вызова QConcurrentMap выставляю процент в прогрессбаре - он отображается). Остальные части интерфейса (менюшки там, тривью всякие) отрабатывают нормально.

Самое интересное, что подобная схема используется повсеместно и работает. Я использую QConcurrentMap вместо паттерна ActiveObject, и отрисовка прогресса - штатная процедура, реализованная мною ранее в других местах.

Я понимаю, что то, что я описал - невозможно. Но оно есть. Позвольте попросить совета - что можно сделать, чтобы оно заработало? Что я мог сделать такого, чтобы добиться такого поведения?

Единственное, что я могу придумать - выпилить их полностью и написать заново, в надежде, что всё заработает.


Название: Re: Контролы не отрисовывают новые значения
Отправлено: Пантер от Октябрь 01, 2013, 10:40
Код показывай, сообщение какое-то запутанное и малоинформативное.


Название: Re: Контролы не отрисовывают новые значения
Отправлено: Bepec от Октябрь 01, 2013, 10:41
Оффтоп: Вы настолько увлеклись описанием, что забыли написать про проблему.

Краткий пересказ вашего - у меня есть NNN, у него есть слот. Значения progressBar изменяются, остальные контролы отрабатываются нормально.

По делу: ну если не долго думать, то у вас проблема в отображении процентов. Если слот вызывается нормально, значения устанавливаются, но не изменяется отображение, то:
1) не успевает перерисовка - слишком много сигналов (вероятность 5% )
2) у вас главный поток загружен в момент использования функции (вероятность 90%)
3) у вас некорректно указан тип соединения сигнал-слота, в результате чего вызов является блокирующим (вероятность 5%)


Название: Re: Контролы не отрисовывают новые значения
Отправлено: cheqa от Октябрь 01, 2013, 11:05
По делу: ну если не долго думать, то у вас проблема в отображении процентов. Если слот вызывается нормально, значения устанавливаются, но не изменяется отображение, то:
1) не успевает перерисовка - слишком много сигналов (вероятность 5% )
2) у вас главный поток загружен в момент использования функции (вероятность 90%)
3) у вас некорректно указан тип соединения сигнал-слота, в результате чего вызов является блокирующим (вероятность 5%)
Меня больше беспокоит то, что даже когда все вычисления заканчиваются, т.е. value=100% - то перерисовка контрола всё равно не происходит.


Название: Re: Контролы не отрисовывают новые значения
Отправлено: cheqa от Октябрь 01, 2013, 11:06
Код показывай, сообщение какое-то запутанное и малоинформативное.
Не покажу - много его слишком, изолированно вряд ли воспроизведётся


Название: Re: Контролы не отрисовывают новые значения
Отправлено: cheqa от Октябрь 01, 2013, 11:10
2) у вас главный поток загружен в момент использования функции (вероятность 90%)
Уточняющий вопрос: если поток загружен в момент использования - то отрисовка не произойдёт никогда?


Название: Re: Контролы не отрисовывают новые значения
Отправлено: Bepec от Октябрь 01, 2013, 16:22
До. Если основной поток программы загружен на 100%, то отрисовки не будет. Откуда на неё время и ресурсы возьмутся?