Доброго времени суток.
Столкнулся со следующей проблемой, которой никак не могу найти объяснение и решение.
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 вылетал и ждал реакции пользователя. С убиранием его - все стало работать.
Тему удалять не буду, дабы если у кого возникнут аналогичные проблемы, увидел решение. Ну и заодно может быть кто-нибудь мне пояснит, почему предыдущие описанные варианты приводят к таким неожиданным результатам.