Comment utiliser mon enum dans QSsortingng.arg ()?

Mon enum est déclaré en tant Q_ENUM macro Q_ENUM afin qu’il Q_ENUM le nom du champ enum lors de l’utilisation de qDebug() (comme j’utilise QT 5.5) au lieu de sa valeur. J’aimerais faire la même chose avec QSsortingng().arg() et j’ai donc déclaré la même chose avec la macro Q_DECLARE_METATYPE() mais cela ne fonctionnait pas non plus et donnait l’erreur ci-dessous.

Code:

 qDebug() << QString("s = %1").arg(myClass::myEnum::ok); 

Erreur:

erreur: pas de fonction correspondante pour l’appel à ‘QSsortingng :: arg (myClass :: myEnum)’

Comment puis-je réparer cela?

Q_ENUM ne fournit pas de conversion directe en une sorte de valeur de chaîne. Vous devez donc utiliser QMetaEnum:

qDebug() << QStringLiteral("s = %1").arg(QMetaEnum::fromType().valueToKey(static_cast(myClass::myEnum::ok));

static_cast est bien sûr nécessaire pour la classe enum.

Vous pouvez utiliser l’ assistant de conversion suivant:

 template  typename QtPrivate::QEnableIf::Value , QSsortingng>::Type toSsortingng(T enumValue) { auto mo = qt_getEnumMetaObject(enumValue); auto enumIdx = mo->indexOfEnumerator(qt_getEnumName(enumValue)); return QLatin1Ssortingng(mo->enumerator(enumIdx).valueToKey(enumValue)); } 

Cela devient alors simple:

 qDebug() << QString::fromLatin1("s = %1").arg(toString(myClass::myEnum::ok));