Привет ВСем! Итак вопрос такой: Есть класс, в полях которого есть указатель на объект наследник от QDialog. Я создаю обьект основного класса, в конструкторе этого класса я создаю обьект в динамической памяти - указатель на наследника QDialog. Обьеект оснновного класса далее я перевожу из GUI потока в другой. Обьект в поле основного класса который я создал динамически в его конструкторе, остается в GUI потоке. Почему при вызове exec у наследника QDialog создается форма диалоога и все виснет?
Base.h
class Base
{
public:
Base();
private:
QDeriveDialog* m_DeriveDialog;
}
Base.cpp:
Base::Base
{
m_DeriveDialog = new QDeriveDialog();
}
...
в основной программе:
qDebug() << thread(); // запомним поток GUI
QThread thr = new QThread;
Base* base = new Base;
base->moveTothread(thr);
...
Base.cpp:
void process()
{
qDebug() << m_DerivedDialog->thread; // проверяю к какому потоку принадлежит объект
// и он равен потоку GUI,
if(m_DerivedDialog->exec() == QDialog::Rejected) // однако при вызове диал.окна, в нем
// все виснет, окно появляется только контуром,
// все остальное не прорисовывается и курсор в
// колесико превращается
ret = false;
...
}
в основном потоке обработкой сообщений системы занимается объект, производный от класса QCoreApplication (вернее, даже от QGuiApplication). А в твоём потоке есть такой объект ?
глянь описание функции QCoreApplication::processEvents
и главный вопрос - а зачем ты вообще пытаешься использовать виджет не в основном потоке? Какая задача ?
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)