如何将Q_ENUM转换为QT的QString>;5.11最有效的方法?

如何将Q_ENUM转换为QT的QString>;5.11最有效的方法?,qt,qt5,qstring,qmetaobject,Qt,Qt5,Qstring,Qmetaobject,我读了一些关于如何从Q_ENUM值中获取实际QString的建议 下面是我提出的3种可能的方法,它们是QT5.11.1中的可编译结构 人们应该选择哪一种?为什么 void MainWindow::setErrorText(QCanBusDevice::CanBusError error) { QString errorString; QDebug(&errorString) << error; ui->statusBar->showMess

我读了一些关于如何从
Q_ENUM
值中获取实际
QString
的建议

下面是我提出的3种可能的方法,它们是QT5.11.1中的可编译结构

人们应该选择哪一种?为什么

void MainWindow::setErrorText(QCanBusDevice::CanBusError error)
{
    QString errorString;
    QDebug(&errorString) << error;
    ui->statusBar->showMessage("Error occured: " + errorString);

    // QT4 ?
    const QMetaObject& mo = QCanBusDevice::staticMetaObject;
    QMetaEnum me = mo.enumerator(mo.indexOfEnumerator("CanBusError"));
    QString errorStr(me.valueToKey(QCanBusDevice::UnconnectedState));
    ui->statusBar->showMessage("Error occured: " + errorStr);

   // From QT5?
   QString errorS(QMetaEnum::fromType<QCanBusDevice::CanBusError>().valueToKey(error));
   ui->statusBar->showMessage("Error occured: " + errorS);
}
void主窗口::setErrorText(QCanBusDevice::CanBusError错误)
{
QString错误字符串;
QDebug(&errorString)状态栏->显示消息(“发生错误:+errorString”);
//QT4?
常量QMetaObject&mo=QCanBusDevice::staticMetaObject;
QMetaEnum me=mo.enumerator(mo.indexOfEnumerator(“CanBusError”);
QString errorStr(me.valueToKey(QCanBusDevice::UnconnectedState));
ui->statusBar->showMessage(“发生错误:+errorStr”);
//从QT5开始?
QString错误(QMetaEnum::fromType().valueToKey(错误));
用户界面->状态栏->显示消息(“发生错误:+错误”);
}

QDebug
应用于日志记录和调试
QDebug
构造一个
QTextStream
,并且对于您尝试执行的操作来说成本相当高

使用
QMetaEnum
是正确的。您不应该以这种方式进行字符串连接,对用户可见的字符串使用
tr
,或者使用
QStringLiteral
而不是其他地方的
tr

const auto errStr = QMetaEnum::fromType<QCanBusDevice::CanBusError>().valueToKey(error);
ui->statusBar->showMessage(tr("Error occured: %1").arg(errStr));
const auto errStr=qmetanum::fromType().valueToKey(错误);
用户界面->状态栏->显示消息(tr(“发生错误:%1”).arg(errStr));

QDebug
应用于日志记录和调试
QDebug
构造一个
QTextStream
,并且对于您尝试执行的操作来说成本相当高

使用
QMetaEnum
是正确的。您不应该以这种方式进行字符串连接,对用户可见的字符串使用
tr
,或者使用
QStringLiteral
而不是其他地方的
tr

const auto errStr = QMetaEnum::fromType<QCanBusDevice::CanBusError>().valueToKey(error);
ui->statusBar->showMessage(tr("Error occured: %1").arg(errStr));
const auto errStr=qmetanum::fromType().valueToKey(错误);
用户界面->状态栏->显示消息(tr(“发生错误:%1”).arg(errStr));

另一种更优雅的方法是使用QVariant的toString()方法:


另一种更优雅的方法是使用QVariant的toString()方法: