【Qt】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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值