Здравствуйте, уважаемые форумчане!
Столкнулся с совершенно непонятной для меня проблемой. Есть небольшая программка, разбитая на два потока: поток GUI (основной, соответственно) и поток вычислений.
Механизм работы следующий: когда пользователь выставляет все настройки в GUI и нажимает кнопочку, запускаются вычисления в отдельном потоке. При этом в GUI перед созданием потока создается окошко с QProgressBar, которое вызывается после запуска потока:
myThread *thread = new myThread( this );
progressForm form;
thread->start();
form.exec();
myListDialog dialog;
dialog.exec();
int selection = dialog.getIndex(); /* Это метод, который вызывает QListWidget::currentIndex().row() для QListWidget, расположенного в диалоговом окне */
myListDialog dialog;
myThread *thread = new myThread( &dialog, this );
progressForm form;
thread->start();
form.exec();
dialog->exec();
int selection = dialog->getIndex();
Raw Gift, может имело бы смысл создать слот в this, а в myThread сигнал. И сигналить this'у о том, что надо диалог отобразить и передать через сигнально-слотовую связь нужные значения для QListWidget.
А также сигнал в this и слот в myThread для возвращения выбраного значения пользователем.
Litkevich Yuriy, я вас немного не понял.
Вы предлагаете создать слот для того чтобы выделение отображать? Ведь сам механизм работает, и QTreeWidget::currentIndex().row() отдает индекс выбранного элемента после закрытия диалога! Просто не отображается выделение, такое ощущение, что QTreeWidget Disabled или перекрывается другим модальным окном... Понимаю, что сложно понять из такого расплывчатного описания, но не знаю, получится ли воссоздать такое поведение в другой программе (к сожалению, исходники этой дать не могу, как и скомпилированную версию - закрытый код, который распространять я права не имею).
Попробую воссоздать такое поведение в другой программе, может быть, заодно и разберусь, что и как.
Прошу прощения, везде вверху, где упомянался QTreeWidget, должен быть QListWidget. Впрочем, сути это не меняет.
Raw Gift, а версия Qt какая?
может попробывать для теста в другой собрать?
Не знаю-не знаю... Мне тут подсказывают, что дедлок мог случиться. В принципе, очень логично: программа разбита на потоки, которые засинхронизированы несколько кривовато... Только вот откуда дедлок в этом конкретном месте... Черт его знает. В общем, как разберусь - напишу!
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)