透過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列舉列表中檢視。