Qt知识点梳理 —— 记录程序运行日志并分类保存

19 篇文章 3 订阅

文章目录

需求功能

代码实现

程序调用

运行效果

注意

项目源码

开发环境


需求功能

0、记录程序关键位置运行日志;

1、按照日期单独存放;

2、将日志按照级别不同分类保存;

3、日志格式需要固定;

代码实现

使用函数QtMessageHandler qInstallMessageHandler(QtMessageHandler);来实现,是全局的;

参考说明文档首先定义并实现函数 MessWriteLog

void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &);

日志等级:

  • qDebug:调试信息
  • qWarning:警告信息
  • qCritical:错误信息

具体实现:

//写日志功能
void MessWriteLog(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    //定义日志文件存放路径
    QString logDir = QApplication::applicationDirPath() + "\\RunLog\\" + QDateTime::currentDateTime().toString("yyyy_MM_dd")+"\\";
    QString logFile;
    QDir curDir(logDir);
    if(!curDir.exists(logDir))//如果路径不存在则创建
    {
        curDir.mkpath(logDir);
        qDebug() << logDir;
    }
    static QMutex mutex;//互斥量
    mutex.lock();
    QString contextType;//日志类型
    switch(type)
    {
    case QtDebugMsg:
        logFile=logDir+"Debug";
        contextType = QString("Debug");
        break;
    case QtWarningMsg:
        logFile=logDir+"Warning";
        contextType = QString("Warning");
        break;
    case QtCriticalMsg:
        logFile=logDir+"Critical";
        contextType = QString("Critical");
        break;
    case QtFatalMsg:
        logFile=logDir+"Fatal";
        contextType = QString("Fatal");
    }
    QString contextInfo = QString("[%1: %2]").arg(QString(context.file)).arg(context.line);//代码所在文件及行数
    QString contextTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.mmm");//当前时间

    QString mess = QString("%1: [%2] %3: %4").arg(contextTime).arg(contextType).arg(contextInfo).arg(msg);//一行日志信息
    QFile contextFile(logFile+".log");
    contextFile.open(QIODevice::WriteOnly | QIODevice::Append);//以只写或追加方式打开文件
    QTextStream contextStream(&contextFile);//定义文件流
    contextStream << mess << "\r\n";//将文件流写入文件
    contextFile.flush();
    contextFile.close();
    mutex.unlock();//释放互斥量
}

main函数中调用:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    qInstallMessageHandler(MessWriteLog);//安装消息处理程序

    MainWindow w;
    w.show();
    return a.exec();
}

程序调用

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //打印日志到文件中
    qDebug("This is a debug message");
    qWarning("This is a warning message");
    qCritical("This is a critical message");
}

运行效果

Log文件创建

具体日志内容

注意

文件、行数等信息在Release模式下默认没有,如果需要的话需要在.pro文件种定义一个宏:

DEFINES += QT_MESSAGELOGCONTEXT

项目源码

GitHub:lizhifun / QtLogDemo

开发环境

Author:Lizhifun

OS:Windows 10 家庭中文版

Compiler:Microsoft Visual C++ Compiler 15.9.28307.1259(amd64)

Kit:Desktop Qt 5.14.2 MSVC2017 64bit

Qt Creator:4.11.1

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 对于学习 qt 知识点整理思维导图非常有帮助。首先,思维导图可以帮助我们梳理 qt 的知识结构,帮助我们建立起一个清晰的知识体系。我们可以将 qt 的主要知识点作为中心思维节点,在周围分支出各个具体的知识点,形成一个完整的思维导图。这样,我们可以清楚地看到每个知识点之间的关系和联系,更好地理解 qt 的整体架构和工作原理。 其次,思维导图可以帮助我们更好地记忆和复习 qt知识点。通过在思维导图中加入关键词、示意图和简单的说明,我们可以将 qt知识点以一种直观的方式呈现出来。这样,在复习的时候,我们可以随时查看思维导图,回忆起相关的知识点,加深记忆。同时,思维导图可以帮助我们发现知识点之间的遗漏或者薄弱之处,有助于我们有针对性地进行重点复习。 最后,思维导图还可以帮助我们提高问题解决能力。在学习 qt 的过程中,我们遇到问题时可以将问题写在思维导图中,并找到与之相关的知识点。通过思考和整理,我们可以更深入地理解问题的本质和解决方法,提高自己的问题解决能力。 综上所述,使用思维导图学习 qt 知识点非常有效。它可以帮助我们梳理知识结构、加深记忆、提高问题解决能力,是我们学习 qt 不可或缺的工具之一。 ### 回答2: Qt是一个跨平台的C++应用程序开发框架,广泛应用于图形界面应用程序的开发。学习Qt时,整理思维导图是一种很好的学习方法。 首先,在思维导图中,我会列出Qt的基本概念和核心模块,包括信号和槽机制、窗口和控件、布局管理、事件处理等。了解这些基本概念可以帮助我建立起对Qt框架的整体认识。 接下来,我会将Qt框架中常用的模块和类进行分组,如图形界面相关的模块(如QWidgets、QPainter、QPixmap等),文件操作相关的模块(如QFile、QDir等),网络通信相关的模块(如QTcpSocket、QUdpSocket等),数据库操作相关的模块(如QSqlDatabase、QSqlQuery等)等。这样做可以让我更清晰地了解Qt框架中各个部分的功能和作用。 在每个模块中,我会进一步细分各个类的功能和使用方法,并在思维导图中进行标注。比如,对于QWidgets模块,我可以列举出常用的窗口类(如QMainWindow、QDialog等)和控件类(如QPushButton、QLineEdit等),并在其旁边注明它们的作用和常用的函数。 此外,在思维导图中,我还可以加入一些示例代码和链接,以加深对Qt知识点的理解和掌握。这样一来,我在学习Qt的过程中,可以通过查阅思维导图来对各个知识点进行回顾和巩固。 总的来说,用思维导图整理Qt知识点可以使我更加系统地学习和掌握Qt框架。将各个知识点有机地结合在一起,形成一个完整的思维导图,有助于我在实际应用开发中更加灵活和高效地运用Qt技术。 ### 回答3: QT是一种跨平台应用程序开发工具,它具有丰富的库和组件,可以帮助开发者快速创建图形用户界面和实现功能丰富的应用程序。学习QT时,可以使用思维导图进行知识点整理,以帮助我们更好地理解和记忆内容。 首先,在思维导图的中心,可以写上"QT"这个关键词,作为整个思维导图的核心。然后,可以根据QT的主要功能和特点,将知识点分为以下几个方面进行整理: 1. QT基础知识:首先要了解QT的基本概念和架构,比如QT的版本、主要组件等。可以列出QT的基本特点,如跨平台性、开源性等。 2. QT的常用类和模块:在思维导图的下方,可以列出QT的常用类和模块,包括QWidget、QLayout、QLabel、QPushButton等,以及常用的模块如图形、网络、数据库等。可以进一步展开每个类和模块,记录它们的特点和示例用法。 3. QT的信号与槽机制:QT的信号与槽机制是其重要的特性之一,可以通过思维导图来详细介绍这个机制的原理和使用方法。可以展示信号和槽的连接方式、参数的传递等。 4. QT的图形用户界面设计:QT提供了丰富的图形用户界面设计工具,如Qt Designer,可以在思维导图中列出图形用户界面设计的基本步骤和注意事项,比如窗口布局、控件的选择和使用等。 5. QT的常用功能和技巧:在思维导图的边缘,可以列出一些常用的QT功能和技巧,如界面国际化、线程处理、文件操作等。可以进一步展开每个功能和技巧,记录其实现方法和使用场景。 通过思维导图的整理学习,可以清晰地掌握QT的核心知识点,有助于开发者更好地理解和运用QT进行应用程序开发。同时,思维导图也可以帮助我们进行知识的巩固和复习,提高学习效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lizhifun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值