编写自定义Qt类型
本文主要介绍如何编写类似QSize,QColor,QString等等可存储于QVariant对象,并且可用于信号-槽系统的数据类型
创建自定义类型:
首先,我们要保证自定义类型满足所有QMetaType的需要,也即:
- 一个公共的默认构造函数
- 一个公共的拷贝构造函数
- 一个公共的析构函数
下面举个例子:
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;
};
声明自定义类型
为了能在QVariant中存储自定义类型,我们还需要在类型的头文件中使用Q_DECLARE_METATYPE()宏来声明它
Q_DECLARE_METATYPE(Message);
这样我们就可以在QVariant中存取Message对象,并且可以在直连槽(Qt::DirectConnection)中作为参数传递对象了
注册自定义类型
在声明后,我们可以在单线程中使用信号-槽