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";
        }
    }

小结

相关推荐
pursue.dreams2 分钟前
Windows系统Golang超详细安装配置教程(2026最新、零基础)
开发语言·windows·golang
小小龙学IT6 分钟前
Go 后端并发实战:从 goroutine 到流水线架构
开发语言·架构·golang
marsh02068 分钟前
60 openclaw与物联网:连接物理世界的智能应用
开发语言·物联网·青少年编程·php·技术美术
我有满天星辰17 分钟前
【Dart 语言学习教程 】第三章:函数式编程与高阶特性
开发语言·javascript·ecmascript
wearegogog12320 分钟前
基于C#的电机监控上位机(串口通信+实时波形)
开发语言·c#
星栈独行22 分钟前
Makepad、egui、Dioxus、Tauri:Rust GUI 到底怎么选
开发语言·后端·程序人生·ui·rust
兰令水31 分钟前
leecodecode【回溯组合】【2026.6.5打卡-java版本】
java·开发语言
zyl8372139 分钟前
Python 线性代数:矩阵与向量
开发语言·python·机器学习
AC赳赳老秦1 小时前
OpenClaw+MySQL 深度应用:自动生成建表语句、索引优化建议与数据迁移脚本
开发语言·数据库·人工智能·python·mysql·算法·openclaw
yangyongdehao301 小时前
桌面宠物开发记:从Rust到Tauri的探索之旅
开发语言·rust·宠物