Russian Qt Forum
Май 02, 2024, 13:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Межпоточный обмен данными  (Прочитано 5478 раз)
0...-5
Гость
« : Сентябрь 08, 2010, 06:28 »

Доброе утро! Вопрос состоит в следующем.
Имеется главный и порождаемый в нем потоке, которые связаны через сигнал - слот. Пытался в порожденном потоке генерировать сигнал, параметром которого является собственная структура. При этом связанный с ним слот основного потока никогда не получает управления(в теле слота выдавал на экран сообщение, ставил точку останова - эффекта ноль). Пробовал различные типы соединений - никаких изменений. Слот срабатывал, только если в параметрах передавать double. Стало интересно, попробовал передать QByteArray, QList<double> - результат такой же, как со структурой. В чем здесь дело?
Записан
Denjs
Гость
« Ответ #1 : Сентябрь 08, 2010, 07:26 »

... Пытался в порожденном потоке генерировать сигнал, параметром которого является собственная структура. ...
Вы вашу структуру зарегистрировали в системе метатипов QT?
Q_DECLARE_METATYPE ( Type )
+
int qRegisterMetaType ( const char * typeName )

Цитата: QT_ASSISTANT
Adding a Q_DECLARE_METATYPE() makes the type known to all template based functions, including QVariant. Note that if you intend to use the type in queued signal and slot connections or in QObject's property system, you also have to call qRegisterMetaType() since the names are resolved at runtime.
« Последнее редактирование: Сентябрь 08, 2010, 07:28 от Denjs » Записан
0...-5
Гость
« Ответ #2 : Сентябрь 08, 2010, 08:15 »

Хм...а в каком месте приложения писать этот макрос? Я подключаю отдельный файл structures.h, в котором описаны все используемые приложением структуры. И еще, остается открытым вопрос почему не работает передача типов QList и QByteArray.
Записан
alexman
Гость
« Ответ #3 : Сентябрь 08, 2010, 08:38 »

int qRegisterMetaType ( const char * typeName ) достаточно. Вызывать перед connect.
Записан
Denjs
Гость
« Ответ #4 : Сентябрь 08, 2010, 09:03 »

Хм...а в каком месте приложения писать этот макрос? Я подключаю отдельный файл structures.h, в котором описаны все используемые приложением структуры. И еще, остается открытым вопрос почему не работает передача типов QList и QByteArray.
В любом месте до вызова первого сигнала.
QList и QByteArray по умолчанию не зарегистррованы.
Записан
0...-5
Гость
« Ответ #5 : Сентябрь 08, 2010, 11:48 »

Спасибо большое Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 20.