当前位置: 首页 > news >正文

qt中的枚举值-QMetaEnum

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

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::fromTypeMainWindow::BtnEnum();
    可以获取qt中的枚举对象
  • key(i),value(i)qt中的枚举对象分别可以使用key和value获取对应的枚举名称和枚举索引
http://www.lryc.cn/news/383809.html

相关文章:

  • 这才是CSDN最系统的网络安全学习路线(建议收藏)
  • 微软Edge浏览器多用户配置文件管理:个性化浏览体验
  • 10.2 JavaEE——Spring MVC入门程序
  • Python 处理大量数据的相关库和框架推荐
  • 【unity笔记】七、Mirror插件使用
  • 掌握SEO:如何优化用ChatGPT生成的文章以提升搜索排名
  • Java面试问题(一)
  • Firewalld防火墙基础
  • 解决Java中多线程同步问题的方案
  • 每日一练 - RSTP与STP收敛速度对比
  • ZS-20H型水泥胶砂振实台
  • 力扣377 组合总和Ⅳ Java版本
  • 昇思25天学习打卡营第3天 | 数据集 Dataset
  • 交换机三层架构及对流量的转发机制
  • 开发者配置项、开发者选项自定义
  • 【Java】解决Java报错:IndexOutOfBoundsException in Collections
  • C++编程(三)面向对象
  • Batch入门教程
  • 49-2 内网渗透 - 使用UACME Bypass UAC
  • Django 表单使用示例:数据格式校验
  • OkHttp框架源码深度剖析【Android热门框架分析第一弹】
  • 【MySQL】数据库——备份与恢复,日志管理1
  • 什么样的企业适合SD-WAN网络专线?
  • 已解决java.security.GeneralSecurityException: 安全性相关的通用异常的正确解决方法,亲测有效!!!
  • 秋招Java后端开发冲刺——非关系型数据库篇(Redis)
  • 个人对JVM的一点理解
  • Flutter【组件】可折叠文本组件
  • 内容安全复习 7 - 对抗攻击与防御
  • 淘宝店铺商家订单API-接入ERP,多平台订单同步的利器
  • 【微前端-Single-SPA、qiankun的基本原理和使用】