компонент класса, созданный в куче после переноса самого обьекта в каком потоке окажется?
qt, QThread, moveToThread, GUI поток
Привет ВСем! Итак вопрос такой: Есть класс, в полях которого есть указатель на объект наследник от 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; ... }
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Добрый день!
В коде я указал, что он не перенёсся.
А я вам сказал, что так делать в принципе нельзя. Нечего пытаться делать то, чего делать нельзя и о чём сказано в документации. Я не вижу смысла даже проверять куда перенёсся объект, поскольку в документации сказано, что подобный подход, который вы попытались применить недопустим.
Нужно работать с данными в других потоках и возвращать результат расчётов в GUI-поток для отображения в виджетах.
Попытка перенести виджет в поток, отличный от GUI поток как правило либо не имеет эффекта, либо ложит программу.
ТАК ДЕЛАТЬ НЕЛЬЗЯ