Russian Qt Forum
Ноябрь 24, 2024, 08:34
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Контролы не отрисовывают новые значения
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Контролы не отрисовывают новые значения (Прочитано 3429 раз)
cheqa
Гость
Контролы не отрисовывают новые значения
«
:
Октябрь 01, 2013, 10:35 »
Доброго дня.
Разрешите разбавить ваш день порцией первостатейного бреда.
Наблюдается следующая картина.
Есть контрол, содержащий прогресс бар и несколько кнопок. Есть алгоритм QConcurrentMap, который с помощью QFutureWatcher периодически рапортует об обработке очередного элемента. Есть слот, который привязан к QFutureWatcher, в котором происходит, в частности, вызов progressBar->setValue (minimum и maximum установлены корректно). Все контролы заэнаблины, видимы, начальные значения отображаются корректно (специально до вызова QConcurrentMap выставляю процент в прогрессбаре - он отображается). Остальные части интерфейса (менюшки там, тривью всякие) отрабатывают нормально.
Самое интересное, что подобная схема используется повсеместно и работает. Я использую QConcurrentMap вместо паттерна ActiveObject, и отрисовка прогресса - штатная процедура, реализованная мною ранее в других местах.
Я понимаю, что то, что я описал - невозможно. Но оно есть. Позвольте попросить совета - что можно сделать, чтобы оно заработало? Что я мог сделать такого, чтобы добиться такого поведения?
Единственное, что я могу придумать - выпилить их полностью и написать заново, в надежде, что всё заработает.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Контролы не отрисовывают новые значения
«
Ответ #1 :
Октябрь 01, 2013, 10:40 »
Код показывай, сообщение какое-то запутанное и малоинформативное.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
Re: Контролы не отрисовывают новые значения
«
Ответ #2 :
Октябрь 01, 2013, 10:41 »
Оффтоп: Вы настолько увлеклись описанием, что забыли написать про проблему.
Краткий пересказ вашего - у меня есть NNN, у него есть слот. Значения progressBar изменяются, остальные контролы отрабатываются нормально.
По делу: ну если не долго думать, то у вас проблема в отображении процентов. Если слот вызывается нормально, значения устанавливаются, но не изменяется отображение, то:
1) не успевает перерисовка - слишком много сигналов (вероятность 5% )
2) у вас главный поток загружен в момент использования функции (вероятность 90%)
3) у вас некорректно указан тип соединения сигнал-слота, в результате чего вызов является блокирующим (вероятность 5%)
Записан
cheqa
Гость
Re: Контролы не отрисовывают новые значения
«
Ответ #3 :
Октябрь 01, 2013, 11:05 »
Цитата: Bepec от Октябрь 01, 2013, 10:41
По делу: ну если не долго думать, то у вас проблема в отображении процентов. Если слот вызывается нормально, значения устанавливаются, но не изменяется отображение, то:
1) не успевает перерисовка - слишком много сигналов (вероятность 5% )
2) у вас главный поток загружен в момент использования функции (вероятность 90%)
3) у вас некорректно указан тип соединения сигнал-слота, в результате чего вызов является блокирующим (вероятность 5%)
Меня больше беспокоит то, что даже когда все вычисления заканчиваются, т.е. value=100% - то перерисовка контрола всё равно не происходит.
Записан
cheqa
Гость
Re: Контролы не отрисовывают новые значения
«
Ответ #4 :
Октябрь 01, 2013, 11:06 »
Цитата: Пантер от Октябрь 01, 2013, 10:40
Код показывай, сообщение какое-то запутанное и малоинформативное.
Не покажу - много его слишком, изолированно вряд ли воспроизведётся
Записан
cheqa
Гость
Re: Контролы не отрисовывают новые значения
«
Ответ #5 :
Октябрь 01, 2013, 11:10 »
Цитата: Bepec от Октябрь 01, 2013, 10:41
2) у вас главный поток загружен в момент использования функции (вероятность 90%)
Уточняющий вопрос: если поток загружен в момент использования - то отрисовка не произойдёт никогда?
Записан
Bepec
Гость
Re: Контролы не отрисовывают новые значения
«
Ответ #6 :
Октябрь 01, 2013, 16:22 »
До. Если основной поток программы загружен на 100%, то отрисовки не будет. Откуда на неё время и ресурсы возьмутся?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...