Qt元物件系統自帶型別與註冊型別的判斷

哥谭周可儿發表於2024-05-09

透過isRegistered()方法判斷

在Qt跨執行緒傳參時,使用訊號槽connect或者呼叫QMetaInvokeMethon時,傳遞的引數的型別通常要注意是不是已在Qt的元物件系統中註冊過了,Qt提供了方法來判斷型別是否被註冊:

bool QMetaType::isRegistered(int type)

其中引數是列舉型別,引數例子:

QMetaType::Int
QMetaType::QString

使用程式碼中判斷結果:

qDebug() << QMetaType::isRegistered(QMetaType::QJsonObject);
//輸出true或false
//這裡QJsonObject類輸出的是true

更直接的方法

正常來說,只要你想判斷的型別在QMetaType::Type的列舉列表中,就是Qt元物件系統自帶的型別。
只要是QMetaType::自動補全的型別,其物件都能直接在QMetaInvokeMethon中當作引數被傳遞。
所有Qt元物件系統自帶型別,都可在Qt的幫助文件中QMetaType::Type列舉列表中檢視。

相關文章