QDialog/QTreeWidget странно себя ведут, то ли с модальностью проблемы, то ли с фокусом... |
Здравствуйте, гость ( Вход | Регистрация )
QDialog/QTreeWidget странно себя ведут, то ли с модальностью проблемы, то ли с фокусом... |
Raw Gift |
15.11.2008, 15:23
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 15.11.2008 Пользователь №: 422 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте, уважаемые форумчане!
Столкнулся с совершенно непонятной для меня проблемой. Есть небольшая программка, разбитая на два потока: поток GUI (основной, соответственно) и поток вычислений. Механизм работы следующий: когда пользователь выставляет все настройки в GUI и нажимает кнопочку, запускаются вычисления в отдельном потоке. При этом в GUI перед созданием потока создается окошко с QProgressBar, которое вызывается после запуска потока:
При этом взаимодействуют поток вычислений и поток GUI (точнее говоря, progressForm) посредством сигналов. Не знаю, насколько это верное решение, но все работает прекрасно. Кроме того, иногда в процессе вычислений может возникнуть "вопрос" к пользователю, т.е. надо показать диалоговое окошко с QListWidget с вариантами "ответа", и только после этого продолжать вычисления. Я, не особо задумываясь, взял да и воткнул создание этого диалога в поток вычислений (т.к. вычисления все равно на время должны прерываться). После этого я просто получал результат (QListWidget::currentIndex().row()) и продолжал вычисления:
Все работало замечательно, пока я не решил собрать программу в Debug-версии. Qt ругнулся на меня assert'ом, мол, нельзя создавать виджеты не в GUI потоке и я с ним согласился. Казалось бы, чего проще, создаем myListDialog внутри GUI потока и передаем указатель конструктору потока вычислений:
Внутри потока вычислений все остается так же точно, как и было:
Но не тут-то было. Каким-то магическим образом получается так, что в QListWidget выделение не отображается, но результат выделения сохраняется. Причем, интересно, если нажать кнопочку Ок диалога, но убрать с нее курсор мышки, выделение таки покажется. Путем плясок с бубном и всякими focusPolicy, а также windowModality, мне удалось добиться того, что первый вариант выбора (кликнули первый раз в список) показывается, а остальные нет. Ума не приложу, что вообще происходит... Искренне признателен за всякую помощь! |
|
|
Litkevich Yuriy |
15.11.2008, 16:49
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Raw Gift, может имело бы смысл создать слот в this, а в myThread сигнал. И сигналить this'у о том, что надо диалог отобразить и передать через сигнально-слотовую связь нужные значения для QListWidget.
А также сигнал в this и слот в myThread для возвращения выбраного значения пользователем. |
|
|
Текстовая версия | Сейчас: 22.12.2024, 11:40 |