Qt中的自定义类型
将自定义类型加入元对象系统(meta-object system),可以获得运行时类型、信号槽等Qt特性支持。
1、自定义类型必须至少满足以下3个条件:
1)1个公有默认构造函数;
2)1个公有拷贝构造函数:
3)1个公有析构函数。
2、使用QMetaType
声明类型:
在头文件中使用Q_DECLARE_METATYPE
宏声明类型: 1
Q_DECLARE_METATYPE(UserDefinedType);
QVariant
类型存储; 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Message
{
public:
Message();
Message(const Message &other);
~Message();
Message(const QString &body, const QStringList &headers);
QString body() const;
QStringList headers() const;
private:
QString m_body;
QStringList m_headers;
};
Q_DECLARE_METATYPE(Message);
QDebug operator<<(QDebug dbg, const Message &message);
以上两步骤完成后,该自定义类型仅能作为直接连接(线程内)的信号槽函数的参数使用。按照文档
“This is because the meta-object system does not know how to handle creation and destruction of objects of the custom type at run-time.”
如果需要跨线程使用自定义类型,那么必须继续完成以下步骤:
3、使用qRegisterMetaType
模板函数向系统注册该自定义类型。 如:qRegisterMetaType<Block>();
,注册后,该类型可以用于信号槽机制中(无论是线程内,还是线程间) 1
2
3
4
5
6
7
8int main(int argc, char *argv[])
{
QApplication app(argc, argv);
...
qRegisterMetaType<Block>();
...
return app.exec();
}
http://doc.qt.io/qt-5/custom-types.html
本文来自:Qt中的自定义类型