Можно ли определить 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)
Q_DECLARE_METATYPE
, иначе он вернетUnknownType
. Не знаю, что вы имеете в виду подQt uses different type names than the compiler
, но это не ваша проблема. - person Jaa-c   schedule 18.09.2017typeid()
. Очевидно, вы не можете использовать это, если оно не возвращает нужное вам значение. Одной из возможностей было бы использованиеmetaObject()->className()
, но для этого требуется экземпляр. Другая возможность — использоватьboost::typeindex::type_id<T>().pretty_name()
, так как он обычно возвращает имя класса. - person Jaa-c   schedule 18.09.2017