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

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

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ Вызов в другом потоке QAxWidget

Автор: krasniy 19.1.2011, 14:41

Суть в том что пытаюсь вызвать в QThread объект класса QAxWidget, проект собирается, но при запуске в отладочную консоль вываливается ASSERT failure in QWidget: "Widgets must be created in the GUI thread.", file kernel\qwidget.cpp, line 1233 поменять QAxWidget на QAxObject не могу, тогда не вызывается ActiveX элемент!!! Подскажите как быть!

Автор: kwisp 19.1.2011, 15:11

krasniy,
боюсь никак. всё гуи должно быть в одном потоке причем в главном.

Автор: PAFOS 19.1.2011, 17:51

Можно вызвать метод виджета из второго потока, но в этом случае метод выполнится в главном потоке

Если такое положение дел устроит тогда три варианта могу предложить:
1. Сигнал - Слот ( Если сигнал вызывается из второстепенного потока, в слот главного потока, то вызов помещается в очередь событий)

2. используй QMetaObject::invokeMethod( widget, "methodName", ..., Qt::QueuedConnection )
Подробное описание см. в документации
Не забудь указать в параметре Qt::QueuedConnection, что превратит вызов в событие

3. Создать класс события и послать его виджету, в которому предусмотреть его обработку.
послать сообщение можно через QCoreApplication::postEvent(object, new SomEvent()), причем именно postEvent а не sendEvent))

P.S. любой это этих методов сразу же вернет управление, не дожидаясь результатов выполнения вызова

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