QLoggingCategory类使用

QLoggingCategory类使用

QLoggingCategory的概述

  1. QLoggingCategory是Qt的日志策略类;可以通过声明不同的日志策略对象来输出不同的日志信息。打印信息类型如下:在这里插入图片描述
  2. Q_DECLARE_LOGGING_CATEGORY(name) 定义一个返回QLoggingCategory对象函数,定义源码如下:
#define Q_DECLARE_LOGGING_CATEGORY(name) \
   const QLoggingCategory &name();
  1. Q_LOGGING_CATEGORY(name, string) 是宏Q_DECLARE_LOGGING_CATEGORY定义函数的实现,定义源码如下:
#define Q_LOGGING_CATEGORY(name, ...) \
   const QLoggingCategory &name() \
   { \
       static const QLoggingCategory category(__VA_ARGS__); \
       return category; \
   }

4.在QLoggingCategory中,可以通过使用setFilterRules()函数来控制日志策略开启和关闭;其规则满足正则表达时,对于多个规则使用如下代码:

//test.cat.debug=false 设置test.cat 的 debug类型关闭,即 qCDebug(testCat)的打印不在输出;多个日志策略之间需要加"\n"作为结束符
QLoggingCategory::setFilterRules("qt.scenegraph.renderloop.debug=true\n" "test.cat.debug=false"); 

5.常用的一些日志策略:
qt.quick.image: 在QQuickPixmapcache 和图片缓存处理相关的日志输出
qt.scenegraph.* 和 QQuick 的scene graph 相关的日志输出
qt.qpa.* 和 Qt Platform 相关的 日志输出

QLoggingCategory 实例代码

//QLoggingCategory使用:
//step1 使用宏 Q_DECLARE_LOGGING_CATEGORY() 声明一个日志策略对象
//step2 使用宏 Q_LOGGING_CATEGORY() 创建一个日志策略对象
//step3 使用qCDebug(日志策略name)<<“打印内容” 输出需要调试信息
//step4 通过设置日志策略message类型的enable状态,来控制是否使能调试信息输出;

//此宏是一个函数声明函数
Q_DECLARE_LOGGING_CATEGORY(testCat)

//此宏是一个函数实现宏
Q_LOGGING_CATEGORY(testCat, "test.cat");

void testCategory() {
    
    qCDebug(testCat) << "testCat qCDebug()";
    qCWarning(testCat) << "testCat qCWarning()";
}

int main(int argc, char *argv[])
{
#if defined(Q_OS_WIN) && QT_VERSION_CHECK(5, 6, 0) <= QT_VERSION && QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif

    qputenv("QSG_INFO", "true");
    QGuiApplication app(argc, argv);
    
    //test.cat.debug=false 来屏蔽qCDebug(testCat) 的打印
    //qt.scenegraph.renderloop.debug=true 使能 qml 渲染循环的debug 打印
    QLoggingCategory::setFilterRules("qt.scenegraph.renderloop.debug=true\n" "test.cat.debug=false");           
    QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);
    
    testCategory();
    
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/qt/qml/testqml/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;
    QObject* rootObject = engine.rootObjects().first();
    QQuickWindow* window = qobject_cast<QQuickWindow*>(rootObject);

    if (window) {
        
        qDebug() << "Successfully retrieved QQuickWindow:" << window;
    }

    return app.exec();
}

QLoggingCategory 实例输出效果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值