拿这个程序(改编自一个探索性测试用例,我注意到一个自定义元类型就像它被注册一样,虽然qRegisterMetaType
没有被调用):
#include <QMetaType>
#include <QVariant>
#include <iostream>
class C1 {
};
Q_DECLARE_METATYPE(C1)
int main() {
std::cout << QMetaType::type("C1") << std::endl;
QVariant v = QVariant::fromValue<C1>(C1());
std::cout << QMetaType::type("C1") << std::endl;
return 0;
}
这输出:
0
256
(进一步的测试确实表明元类型确实已注册——它可以被construct
'ed (即使在Q_DECLARE_METATYPE(..)
不可见的地方)等)
这种行为众所周知吗?依靠?(可能不是,但是尝试按照“官方”规则注册元类型首先让我感到困惑,因此提出了这个问题)
PS 当然,可以看到qRegisterMetaType
调用 inside Q_DECLARE_METATYPE(..)
,但问题仍然存在(至少我希望如此)。
提前致谢。