crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Вызов в другом потоке QAxWidget
krasniy
  опции профиля:
сообщение 19.1.2011, 14:41
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 7.10.2010
Пользователь №: 2087

Спасибо сказали: 0 раз(а)




Репутация:   0  


Суть в том что пытаюсь вызвать в 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
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


krasniy,
боюсь никак. всё гуи должно быть в одном потоке причем в главном.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 19.1.2011, 17:51
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

Спасибо сказали: 29 раз(а)




Репутация:   8  


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

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

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

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

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

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 5.12.2022, 4:40