Znacznie bardziej elegancki sposób znalazł (Qt 5.9), tylko jedną pojedynczą linię, za pomocą potężnego QVariant.
okazuje enum na ciąg:
QString theBig = QVariant::fromValue(ModelApple::Big).value<QString>();
Być może nie trzeba QMetaEnum więcej.
Przykładowy kod tutaj:
ModelApple (nie ma potrzeby zastrzeżenia Q_DECLARE_METATYE)
class ModelApple : public QObject
{
Q_OBJECT
public:
enum AppleType {
Big,
Small
};
Q_ENUM(AppleType)
explicit ModelApple(QObject *parent = nullptr);
};
I utworzyć aplikację widget, wywołując funkcję QVaraint tam:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <modelapple.h>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QString s = QVariant::fromValue(ModelApple::Big).value<QString>();
qDebug() << s;
}
MainWindow::~MainWindow()
{
delete ui;
}
Widać, że Próbuję wypisać ciąg na konsoli, który tak naprawdę: 
Przepraszam za odwrotny rzut, próbowałem z powodzeniem w niektórych projektach, ale niektóre, jak tym razem poznałem błąd kompilacji. Więc postanowiłem usunąć to z mojej odpowiedzi.
'QMetaEnum :: fromType' jest dostępne od Qt 5, nie istnieje w Qt 4. Powinieneś dodać tę uwagę. Nawiasem mówiąc, nie polecam używać 'QMetaEnum :: key', ponieważ bierze on' index' jako parametr, jak to się stało, że zadeklarował 'enum AppleType {Big = 2, Small}' –
Danh
Z dokumentów wygląda to tak: jest to w rzeczywistości dostępne tylko z Qt 5.5, więc nadal potrzebuję użyć mojej metody w odpowiedzi, którą dałem (miał zamiar zaktualizować mój kod, ale na razie muszę używać Qt 5.4). –