如何将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()方法: