qt中的枚举值-QMetaEnum

测试代码

h

#include <QMainWindow>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public://枚举值测试
    enum BtnEnum {
        pushButton,
        pushButton_2,
        pushButton_3,
        pushButton_4,
        pushButton_5,
        pushButton_6,
        pushButton_7,
        BTN_COUNT //btn就是按钮的缩写,count就是总数
    };
    Q_ENUM(BtnEnum)
public:
    void someFunction();
public slots:
    void slot_btn_clicked();
    void Print(int btnType);
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

注意:如果枚举写在类里面就用Q_ENUM注册一下,如果写在类外面就算了,不用Q_ENUM去注册

cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMetaEnum>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->pushButton,&QPushButton::clicked,this,slot_btn_clicked);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::someFunction()
{
    //获取BtnEnum这个枚举变量,我们赋值给metaEnum
    QMetaEnum metaEnum = QMetaEnum::fromType<MainWindow::BtnEnum>();

        // 获取枚举的名称和值
        for (int i = 0; i < metaEnum.keyCount(); ++i) {
            const char *key = metaEnum.key(i);
            int value = metaEnum.value(i);
            qDebug() << "Key:" << key << "Value:" << value;//key和value都有了
        }

        // 根据名称获取枚举值
        int btnViewValue = metaEnum.keyToValue("pushButton");//根据pushButton这个名称获取对应的值(索引)
        qDebug() << "pushButton value:" << btnViewValue;

        // 根据值获取枚举名称
        const char *btnStopKey = metaEnum.valueToKey(MainWindow::pushButton_7);//根据枚举值获得名称(这个没啥用啊)
        qDebug() << "pushButton_7 key:" << btnStopKey;
}

void MainWindow::slot_btn_clicked()
{
    QPushButton *btn = (QPushButton*)sender();//可以在槽函数中使用sender函数,知道是哪个按钮触发了这个槽函数
    QString objectName = btn->objectName();//获取这个变量的名称
    QMetaEnum metaEnum = QMetaEnum::fromType<MainWindow::BtnEnum>();
    int btnType = metaEnum.keyToValue(objectName.toLocal8Bit());
    if(btnType>= pushButton && btnType <BTN_COUNT)//BtnEnum 枚举变量的第一枚举值是pushButton,最后一个枚举值是BTN_COUNT
    {
        Print(btnType);
    }
}

void MainWindow::Print(int btnType)
{
    QMetaEnum metaEnum = QMetaEnum::fromType<MainWindow::BtnEnum>();
    qDebug()<<metaEnum.key(btnType)<<"被调用了";
}

讲解

  • QMetaEnum metaEnum = QMetaEnum::fromType<MainWindow::BtnEnum>();
    可以获取qt中的枚举对象
  • key(i),value(i) : qt中的枚举对象分别可以使用key和value获取对应的枚举名称和枚举索引
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏过山河,踏过海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值