是否可以确定模板参数的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)
最佳答案
我在Qt 5.12.4上测试了您的代码,它似乎可以工作。
您还可以Q_DECLARE_METATYPE注册您的自定义类型,然后使用qMetaTypeId()获取metaType id。
这是我的测试代码和示例:
#include <QCoreApplication>
#include <QDebug>
#include <QMetaType>
#include <QRect>
#include <QMetaObject>
class MyType
{
public:
int _member;
};
// needed for getType2()
Q_DECLARE_METATYPE(MyType);
// needed for getType()
const int id = qRegisterMetaType<MyType>("MyType");
template <class T>
class MyClass {
public:
int getType() {
return QMetaType::type(typeid(T).name());
}
int getType2() {
return qMetaTypeId<T>();
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << MyClass<int>().getType();
qDebug() << MyClass<QString>().getType();
qDebug() << MyClass<QRect>().getType();
qDebug() << MyClass<MyType>().getType();
qDebug() << MyClass<int>().getType2();
qDebug() << MyClass<QString>().getType2();
qDebug() << MyClass<QRect>().getType2();
qDebug() << MyClass<MyType>().getType2();
return a.exec();
}
输出:2
10
19
1024
2
10
19
1024
关于c++ - QMetaType::Type来自模板类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46275120/