QMetaEnum
- 測試代碼
- h
- cpp
- 講解
測試代碼
h
#include <QMainWindow>
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic: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這個枚舉變量,我們賦值給metaEnumQMetaEnum 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獲取對應的枚舉名稱和枚舉索引