在Qt中使用switch case语句抓取QString类型

19 篇文章 0 订阅

在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::fromType<Myinterface::Priority>();
QByteArray ba=scence.toLatin1();
const char * c_scence=ba.data();
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值