Название: Контролы не отрисовывают новые значения Отправлено: 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 По делу: ну если не долго думать, то у вас проблема в отображении процентов. Если слот вызывается нормально, значения устанавливаются, но не изменяется отображение, то: Меня больше беспокоит то, что даже когда все вычисления заканчиваются, т.е. value=100% - то перерисовка контрола всё равно не происходит.1) не успевает перерисовка - слишком много сигналов (вероятность 5% ) 2) у вас главный поток загружен в момент использования функции (вероятность 90%) 3) у вас некорректно указан тип соединения сигнал-слота, в результате чего вызов является блокирующим (вероятность 5%) Название: Re: Контролы не отрисовывают новые значения Отправлено: cheqa от Октябрь 01, 2013, 11:06 Код показывай, сообщение какое-то запутанное и малоинформативное. Не покажу - много его слишком, изолированно вряд ли воспроизведётсяНазвание: Re: Контролы не отрисовывают новые значения Отправлено: cheqa от Октябрь 01, 2013, 11:10 2) у вас главный поток загружен в момент использования функции (вероятность 90%) Уточняющий вопрос: если поток загружен в момент использования - то отрисовка не произойдёт никогда? Название: Re: Контролы не отрисовывают новые значения Отправлено: Bepec от Октябрь 01, 2013, 16:22 До. Если основной поток программы загружен на 100%, то отрисовки не будет. Откуда на неё время и ресурсы возьмутся?
|