QMetaType ::从模板类型中键入

时间:2017-09-18 08:48:11

标签: c++ qt templates qmetatype

是否可以确定模板参数的QMetaType :: Type值。

我试过了:

template <class T>
class MyClass {
public:
    int getType() {
        return QMetaType::type(typeid(T).name());
    }
};

但是这总是返回0(QMetaType :: UnknownType),因为Qt使用与编译器不同的类型名称。

它的工作方式如下:

MyClass<int>().getType();     // 2 (QMetaType::Int)
MyClass<QString>().getType(); // 10 (QMetaType::QString)
MyClass<QRect>().getType();   // 19 (QMetaType::QRect)
MyClass<MyType>().getType();  // 1024 (Set by qRegisterMetaType)

1 个答案:

答案 0 :(得分:0)

我在Qt 5.12.4上测试了您的代码,它似乎可以工作。 您还可以Q_DECLARE_METATYPE注册您的自定义类型,然后使用qMetaTypeId()获取metaType ID。

这是我的测试代码和示例:

2
10
19
1024
2
10
19
1024

此输出:

l = """name  day  color
John   1   White
John   2   White
John   3   Blue
John   4   Blue
John   5   White
Tom    2   White
Tom    3   Blue
Tom    4   Blue
Tom    5   Black
Jerry  1   Black
Jerry  2   Black
Jerry  4   Black
Jerry  5   White""".split('\n')
相关问题