Название: Непонятное поведение программы при вызове диалогового окна Отправлено: sk_alex от Август 25, 2006, 10:01 Доброго времени суток.
Столкнулся со следующей проблемой, которой никак не могу найти объяснение и решение. Qt 3.3.3 под Windows + Visual C++ 6 Проблема: Есть класс диалогового окна MyDlgImpl, наследованный через класс MyDlg (сгенерированный Qt designer'ом) от QDialog. В классе MyMainWindow (: public QMainWindow) есть метод, который пытается этот самый диалог вызвать: void MyMainWindow::CallDlg() { MyDlgImpl dlg; dlg.exec(); } Когда я этот метод вызываю из функции обработки события на выбор пункта меню - все шикарно работает. Однако мне нужно вызвать этот диалог не из меню программы, а по приходу события от другой нитки (thread'а) в программе. То есть мне нужно вызвать эту функцию из функции MyMainWindow::customEvent (QCustomEvent *e) При попытке же это сделать, я получаю "First-chance exception in MyProgram.exe (QT-MT333.DLL): 0xC0000005: Access Violation." :( Пытался поступить иначе. Объявляю в классе MyMainWindow указатель на класс диалога: MyDlgImpl *pdlg; И в конструкторе класса MyMainWindow делаю ему new: pdlg = new MyDlgImpl(); Поле этого в методе MyMainWindow::CallDlg() говорю: pdlg->exec(); Диалог успешно появляется и работает, но его закрытие почему-то завершает работу всего приложения. :shock: Хорошо. Еще вариант: Вместо pdlg->exec(); набираю pdlg->show(); Имею зависание программы с появившимся на экране диалоговым окном. :cry: Как все это можно объяснить, что я делаю не так и как сделать правильно? :oops: Заранее благодарен всем откликнувшимся. Upd: С последним вариантом (который pdlg->show()) все заработало - у меня просто по этому же событию еще и MessageBox вылетал и ждал реакции пользователя. С убиранием его - все стало работать. Тему удалять не буду, дабы если у кого возникнут аналогичные проблемы, увидел решение. Ну и заодно может быть кто-нибудь мне пояснит, почему предыдущие описанные варианты приводят к таким неожиданным результатам. Название: Непонятное поведение программы при вызове диалогового окна Отправлено: bigirbis от Август 25, 2006, 11:47 Похоже на то, что у тебя евент создавался и обрабатывался в отдельном потоке. Как следствие - диалог тоже. А, как известно, ГУИ должны работать только в гуёвом потоке. Отсюда, наверное, и проблемы.
|