Qt中使用switch case语句抓取QString
在Qt中使用switch case语句抓取QString类型
在编写Qt程序时,发现switch case 无法直接抓取QString类型进行比较。
在网络上总结了两种方法:
参考:https://blog.csdn.net/qq_39404112/article/details/105384517
1.使用了QStringList进行操作
使用QStringList
插入List的顺序对应case语句的0,1,……
QStringList stringList;
stringList << "QString数据1" << "QString数据2";
使用indexOf获取下标,对应case语句的数值。
QString string = "QString数据1";
stringList.indexOf(string);
完整代码:
QString string = "QString数据1";
QStringList stringList;
stringList << "QString数据1" << "QString数据2";
switch (stringList.indexOf(string)) {
case 0:
//***
break;
case 1:
//***
break;
default :
//***
break;
}
2.使用了Qt的枚举类型进行操作
创建枚举类型 myinterface.h
#ifndef MYINTERFACE_H
#define MYINTERFACE_H
#include <QObject>
class Myinterface : public QObject
{
Q_OBJECT
public:
explicit Myinterface(QObject *parent = nullptr);
enum Priority
{
aaaaa,
//***,
//***,
//***,
//***
};
Q_ENUM(Priority)
signals:
public slots:
};
#endif // MYINTERFACE_H
在主函数中使用
QMetaEnum metaEnum = QMetaEnum::fromType<Myinterface::Priority>();
QByteArray ba=scence.toLatin1();
const char * c_scence=ba.data();
//qDebug()<<c_scence;
switch (metaEnum.keyToValue(c_scence)) {
case 1:
this->p_infscence->close();
setAttribute(Qt::WA_DeleteOnClose);
break;
case 2:
this->u_managescence->close();
setAttribute(Qt::WA_DeleteOnClose);
break;
case 3:
this->m_managescence->close();
setAttribute(Qt::WA_DeleteOnClose);
break;
case 4:
this->v_queryscence->close();
setAttribute(Qt::WA_DeleteOnClose);
break;
case 5:
break;
case 6:
this->m_maskscence->close();
setAttribute(Qt::WA_DeleteOnClose);
break;
default:
break;
重点:
metaEnum.keyToValue(c_scence)中c_scence的类型是const char *
所以需要将QString类型转为const char *类型
语句:
QMetaEnum metaEnum = QMetaEnum::fromTypeMyinterface::Priority();
QByteArray ba=scence.toLatin1();
const char * c_scence=ba.data();
原文链接:https://blog.csdn.net/m0_45866718/article/details/114500271