Russian Qt Forum

Qt => Вопросы новичков => Тема начата: akaMDA от Июль 18, 2012, 15:00



Название: Передача QHash<QString, QString> через слот
Отправлено: akaMDA от Июль 18, 2012, 15:00
Хочу передать QHash<QString, QString> через слот. Просто так не берет - надо регистировать. Однако не удается скормить Q_DECLARE_METATYPE(QHash<QString, QString>) - возникают ошибки. Как это сделать?


Название: Re: Передача QHash<QString, QString> через слот
Отправлено: mutineer от Июль 18, 2012, 15:04
Цитировать
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.
Ну и ошибки прочитать неплохо бы


Название: Re: Передача QHash<QString, QString> через слот
Отправлено: akaMDA от Июль 18, 2012, 15:08
я вызывыю qRegisterMetaType(). Ошибки происходят до компиляции - Qt creator требует ; после Q_DECLARE_METATYPE(QHash<QString, QString>) Ставлю - тебует после Q_DECLARE_METATYPE


Название: Re: Передача QHash<QString, QString> через слот
Отправлено: mutineer от Июль 18, 2012, 15:09
покажи кусок кода и сами ошибки


Название: Re: Передача QHash<QString, QString> через слот
Отправлено: akaMDA от Июль 18, 2012, 15:13
Код:
файл .h

#include .....
Q_DECLARE_METATYPE(QHash<QString, QString>)

класс
.............
Код:
файл cpp
в конструкторе
qRegisterMetaType<QHash<QString, QString> >("QHash<QString, QString>")

класс
.............

Ошибки происходят до компиляции - Qt creator требует ; после Q_DECLARE_METATYPE(QHash<QString, QString>) Ставлю - тебует после Q_DECLARE_METATYPE


Название: Re: Передача QHash<QString, QString> через слот
Отправлено: mutineer от Июль 18, 2012, 15:16
ошибки до компиляции? это как?
и попробуй не передавать в qRegisterMetaType строку


Название: Re: Передача QHash<QString, QString> через слот
Отправлено: Igors от Июль 18, 2012, 15:20
Код
C++ (Qt)
typedef QHash <QString, QString> TSHash;
Q_DECLARE_METATYPE(TSHash);
 


Название: Re: Передача QHash<QString, QString> через слот
Отправлено: akaMDA от Июль 18, 2012, 15:22
тьфу, туплю.
Ошибки -

error: C2976: too few template arguments
error: C2143: syntax error : missing ';'
error: C3203: class template invalid as template argument for template parameter , expected a real type
error: C2955: use of class template requires template argument


Название: Re: Передача QHash<QString, QString> через слот
Отправлено: akaMDA от Июль 18, 2012, 15:26
Код:
typedef QHash <QString, QString> TSHash;
Q_DECLARE_METATYPE(TSHash);

Помогло, спасибо!