Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Виснет диалог при отрисовке

Автор: Гость_Fynjy_* 15.2.2018, 12:50

Привет ВСем! Итак вопрос такой: Есть класс, в полях которого есть указатель на объект наследник от 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;
...
}


Обратите внимание что объект m_DerivedDialog продолжет принадлежать основному потоку GUI, но диалог на отрисовке зависает

Автор: Алексей1153 16.2.2018, 7:09

в основном потоке обработкой сообщений системы занимается объект, производный от класса QCoreApplication (вернее, даже от QGuiApplication). А в твоём потоке есть такой объект ?

глянь описание функции QCoreApplication::processEvents

и главный вопрос - а зачем ты вообще пытаешься использовать виджет не в основном потоке? Какая задача ?

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)