QT枚举类型转字符串和使用QDebug<<重载输出私有枚举类型

一 将QT自带的枚举类型转换为QString

需要的头文件:

cpp 复制代码
#include <QMetaObject>
#include <QMetaEnum>

测试代码

cpp 复制代码
   const QMetaObject *metaObject = &QImage::staticMetaObject;
    QMetaEnum metaEnum = metaObject->enumerator(metaObject->indexOfEnumerator("Format"));
    QString formatString = metaEnum.valueToKey(image1.format());
    qDebug() << "formatString = " << formatString;

测试输出的结果:

formatString = "Format_Mono"

二 通过qdebug<<重载自己的私有枚举

1 修改类

添加自己的枚举类型和枚举类型转字符串函数:

cpp 复制代码
class MainWindow : public QMainWindow
{
    Q_OBJECT

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

    enum myenum{
        MY_ENUM_ONE,
        MY_ENUM_TWO,
    };

    static QString toString(myenum value) {
        switch (value) {
        case MY_ENUM_ONE: return "MY_ENUM_ONE";
        case MY_ENUM_TWO: return "MY_ENUM_TWO";
        default: return "Unknown";
        }
    }
}

2 添加QDebug的<<新的重载方法

然后,为 QDebug 类提供一个重载的 operator<<() 方法:

cpp 复制代码
// 为 QDebug 提供重载的 operator<<,用于输出 MainWindow::myenum 类型的值
QDebug operator<<(QDebug debug, MainWindow::myenum value) {
    QDebugStateSaver saver(debug); // 保存 QDebug 的当前状态
    debug.nospace() << MainWindow::toString(value); // 输出枚举值的字符串表示
    return debug;
}

3 添加测试代码

在构造函数中添加测试代码:

cpp 复制代码
    enum myenum one = myenum::MY_ENUM_ONE;
    qDebug() << one;

4 测试结果:

三 将私有枚举转字符串

这样就可以了

cpp 复制代码
    static QString toString(myenum value) {
        switch (value) {
        case MY_ENUM_ONE: return "MY_ENUM_ONE";
        case MY_ENUM_TWO: return "MY_ENUM_TWO";
        default: return "Unknown";
        }
    }

小结

相关推荐
故事和你91几秒前
洛谷-算法2-4-字符串2
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
郝学胜-神的一滴几秒前
干货版《算法导论》 02 :算法效率核心解密
java·开发语言·数据结构·c++·python·算法
布吉岛的石头1 分钟前
Java 岗,面试常问 100 题(精简版)
java·开发语言·面试
01漫游者3 分钟前
JavaScript内存管理与闭包
开发语言·javascript·ecmascript
玛卡巴卡ldf8 分钟前
【Springboot升级AI】(大模型部署)LangChain4j、会话记忆、隔离消失持久化问题、ollama、RAG知识库、Tools工具
java·开发语言·人工智能·spring boot·后端·springboot
zmzb01038 分钟前
C++课后习题训练记录Day120
开发语言·c++
tjl521314_2112 分钟前
01C++ 类定义与访问控制(封装)
java·开发语言·c++
九转成圣10 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
SmartRadio10 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
laowangpython10 小时前
Rust 入门:GitHub 热门内存安全编程语言
开发语言·其他·rust·github