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)’
- Quelle est la raison de cette boucle While sans opération utilisée pour la macro assert?
- Filetage en BHO / ATL / COM. Winapi ou autre chose?
- Struct avec initialisation par défaut du champ booléen?
- Comment passer d’un tuple à un tuple de références à des éléments du tuple?
- Erreur de segmentation provoquée / évitée en modifiant l’ordre du fichier source dans le fichier Makefile
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
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));