Russian Qt Forum
Ноябрь 24, 2024, 08:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Контролы не отрисовывают новые значения  (Прочитано 3432 раз)
cheqa
Гость
« : Октябрь 01, 2013, 10:35 »

Доброго дня.
Разрешите разбавить ваш день порцией первостатейного бреда.

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

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

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

Единственное, что я могу придумать - выпилить их полностью и написать заново, в надежде, что всё заработает.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 01, 2013, 10:40 »

Код показывай, сообщение какое-то запутанное и малоинформативное.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #2 : Октябрь 01, 2013, 10:41 »

Оффтоп: Вы настолько увлеклись описанием, что забыли написать про проблему.

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

По делу: ну если не долго думать, то у вас проблема в отображении процентов. Если слот вызывается нормально, значения устанавливаются, но не изменяется отображение, то:
1) не успевает перерисовка - слишком много сигналов (вероятность 5% )
2) у вас главный поток загружен в момент использования функции (вероятность 90%)
3) у вас некорректно указан тип соединения сигнал-слота, в результате чего вызов является блокирующим (вероятность 5%)
Записан
cheqa
Гость
« Ответ #3 : Октябрь 01, 2013, 11:05 »

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

Код показывай, сообщение какое-то запутанное и малоинформативное.
Не покажу - много его слишком, изолированно вряд ли воспроизведётся
Записан
cheqa
Гость
« Ответ #5 : Октябрь 01, 2013, 11:10 »

2) у вас главный поток загружен в момент использования функции (вероятность 90%)
Уточняющий вопрос: если поток загружен в момент использования - то отрисовка не произойдёт никогда?
Записан
Bepec
Гость
« Ответ #6 : Октябрь 01, 2013, 16:22 »

До. Если основной поток программы загружен на 100%, то отрисовки не будет. Откуда на неё время и ресурсы возьмутся?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 23.