本文講述如何註冊自定義類型到Qt元對象系統中和它有什麼作用。

註冊自定義結構體為例

  1. 使用Q_DECLARE_METATYPE標記自定義類型;

#include <QMetaType>
struct MyStruct {
QString name;
QString color;
};

Q_DECLARE_METATYPE(MyStruct)

  1. 在main函數中使用qRegisterMetaType註冊自定義類型到元對象系統中。

int main(int argc, char *argv[]) {
...
qRegisterMetaType<MyStruct>();
...
return 0;
}

作用

  • Q_DECLARE_METATYPEQ標記的類型可以讓QMetaType查詢到類型,也可以讓QVariant識別到。例如:

MyStruct myStruct;
QVariant variant;
variant.setValue(myStruct); // 不使用Q_DECLARE_METATYPEQ標記的自定義類型會出現編譯錯誤。
...
MyStruct myStruct2 = variant.value<MyStruct>();
...

  • 使用qRegisterMetaType註冊自定義類型到元對象系統中主要作用為QObject的屬性系統(信號槽)中使用該自定義類型。

推薦閱讀:

相關文章