是否可以确定模板参数的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)发布于 2020-09-14 16:55:52
我在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
1024https://stackoverflow.com/questions/46275120
复制相似问题