könnten Sie this verwenden:
const char * QVariant::typeName() const
Gibt den Namen der in der Variante gespeicherten Typ. Die zurückgegebenen Zeichenfolgen beschreiben den C++ - Datentyp, der zum Speichern der Daten verwendet wird: z. B. "QFont", "QString" oder "QVariantList". Eine ungültige Variante gibt 0 zurück.
Dies funktioniert für POD und registrierte integrierte Qt-Typen. Sie müssen jedoch die following method für die Registrierung Ihres benutzerdefinierten Typs verwenden.
int qRegisterMetaType(const char * typeName)
Eine andere Sache, die Sie versuchen könnten, obwohl es etwas überflüssig QVariant
ist mit Objekt QMetaObject in der folgenden Art und Weise zu arbeiten:
const char * QMetaObject::className() const
Gibt den Klassennamen.
und
const QMetaObject * QObject::metaObject() const [virtual]
Gibt einen Zeiger auf das Meta-Objekt dieses Objekts.
Ein Metaobjekt enthält Informationen über eine Klasse, die QObject erbt, z. Klassenname, Superklassenname, Eigenschaften, Signale und Slots. Jede QObject-Unterklasse, die den Q_OBJECT-Makro enthält, wird ein Meta-Objekt haben.
Die Meta-Objektinformationen werden vom Signal/Slot-Verbindungsmechanismus und vom Eigenschaftensystem benötigt. Die Funktion eres() verwendet auch das Meta-Objekt.
Wenn Sie keinen Zeiger auf eine tatsächliche Objektinstanz haben, aber trotzdem auf das Metaobjekt einer Klasse zugreifen möchten, können Sie staticMetaObject verwenden.
Es ist unnötig zu sagen, dass dies nur für QObjects funktioniert, also nicht für QString usw. Sie müssten QObject-Unterklassen erstellen.
Es gibt auch einige QMetaType
, die Sie für die Erstellung verwenden können, aber this ist ein bisschen anders, so erwähne ich hier nur auf Vollständigkeit:
int QMetaType::type(const char * typeName) [static]
Liefert ein Handle auf den Typ namens typeName oder QMetaType :: UnknownType, wenn es keinen solchen Typ gibt.
Hier können Sie alle Arten finden:
http://qt-project.org/doc/qt-5.1/qtcore/qmetatype.html#Type-enum
Ich denke, die Ausgabe für Ihr Programm ist die erwartete Ausgabe. Wenn ich die Namen der Variablen "i", "d" und "f" ändere, gibt es mir immer noch diese Zeichenfolgen. Die genaue Schreibweise der Ausgabe von 'typeid :: name()' ist Implementierung definiert, und es scheint, dass Sie einen Namen geben, der sich auf den verstümmelten C++ - Namen für den Typ bezieht. Das macht tatsächlich eine gewisse Menge Sinn. –
Typeinfo funktioniert wie geplant auf Ihrem System. Warum glaubst du, gibt es ein Problem? –
Sie brauchen Qt dafür nicht. Die meisten C++ - Implementierungen bieten das, was Sie benötigen, obwohl es in gewissem Umfang Compiler-spezifisch ist. –