欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > QLoggingCategory类使用

QLoggingCategory类使用

2025/3/11 13:00:47 来源:https://blog.csdn.net/u013125105/article/details/145557459  浏览:    关键词: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);
#endifqputenv("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 实例输出效果:

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词