Qt中可以获取枚举变量的枚举值、枚举字符串、枚举数量等相关信息。
效果图及示例代码
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
enum WeekEnum
{
SUN = 0,
MON,
TUE,
WED,
THU,
FRI,
SAT
};
Q_ENUM(WeekEnum)
explicit Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_btnStringToValue_clicked();
void on_btnValueToString_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
实现文件
#include "widget.h"
#include "ui_widget.h"
#include <QMetaEnum>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QMetaEnum metaEnum = QMetaEnum::fromType<Widget::WeekEnum>();
ui->lEditName->setText(metaEnum.name());
ui->lEditScope->setText(metaEnum.scope());
ui->lEditCount->setText(QString::number(metaEnum.keyCount()));
//本次示例中的前提条件是:枚举变量从0开始,且连续
for (int i = 0; i < metaEnum.keyCount(); i++)
{
//根据值获取字符串
QString str = metaEnum.valueToKey(i);
ui->txtEditString->append(str);
ui->txtEditString->append("\n");
ui->txtEditValue->append(QString::number(i));
ui->txtEditValue->append("\n");
ui->cboxString->addItem(str);
ui->cboxValue->addItem(QString::number(i));
}
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_btnStringToValue_clicked()
{
QMetaEnum metaEnum = QMetaEnum::fromType<Widget::WeekEnum>();
QString str = ui->cboxString->currentText();
int value = metaEnum.keyToValue(str.toStdString().c_str());
ui->lEditValue->setText(QString::number(value));
}
void Widget::on_btnValueToString_clicked()
{
QMetaEnum metaEnum = QMetaEnum::fromType<Widget::WeekEnum>();
int value = ui->cboxValue->currentText().toInt();
QString str = metaEnum.valueToKey(value);
ui->lEditString->setText(str);
}