最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt打印信息輸出到日志文件中的兩種方法

 更新時間:2024年04月16日 10:49:33   作者:沙振宇  
最近在研究把?Qt?的打印信息?輸出的到日志文件中,文件存儲嘗試了2種方法,并通過代碼示例和圖文給大家介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下

1、簡述

最近在研究把 Qt 的打印信息 輸出的到日志文件中,文件存儲嘗試了2種方法。

2、效果圖

3、方法一 利用ofstream實現(xiàn)文件存儲

利用ofstream文件寫操作,將內(nèi)存數(shù)據(jù)寫入存儲文件。

找到main.cpp:

3.1、增加頭文件引用

#include <QDateTime>
#include <QDebug>
#include <fstream>      // std::ofstream

3.2、增加全局變量

std::ofstream g_OutputDebug;

3.3、定義函數(shù)

void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    // 加鎖
    static QMutex mutex;
    mutex.lock(); 
    QString text;
    switch(type) {
    case QtDebugMsg:
        text = QString("Debug: ");
        break;
    case QtWarningMsg:
        text = QString("Warning: ");
        break;
    case QtCriticalMsg:
        text = QString("Critical:");
        break;
    case QtFatalMsg:
        text = QString("Fatal: ");
        break;
    default:
        text = QString("Debug: ");
    }
 
    QString context_info = QString("F:(%1) L:(%2)").arg(QString(context.file)).arg(context.line); // F文件信息L行數(shù)
    QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
    QString current_date = QString("(%1)").arg(current_date_time);
    std::string message = qPrintable(QString("%1 %2 \t%3 \t%4").arg(text).arg(context_info).arg(current_date).arg(msg));
    g_OutputDebug << message << "\r\n"; // std::ofstream
    // 解鎖
    mutex.unlock();
}

3.4、增加注冊信息及記錄到文件中

int main(int argc, char *argv[])
{
    //注冊MessageHandler
    qInstallMessageHandler(outputMessage); //注冊MessageHandler
    g_OutputDebug.open(qPrintable(QString(QString(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss").append("-log.txt")))), std::ios::out | std::ios::trunc);
 
    QApplication a(argc, argv);
    MainWindow w; 
    w.show();
    return a.exec();
}

4、方法二 利用QFile記錄文件

4.1、增加頭文件引用

#include <QDateTime>
#include <QDebug>
 
#include <QFile>

4.2、定義函數(shù)

void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    // 加鎖
    static QMutex mutex;
    mutex.lock();
    QByteArray localMsg = msg.toLocal8Bit();
    QString text;
    switch(type) {
    case QtDebugMsg:
        text = QString("Debug: ");
        break;
    case QtWarningMsg:
        text = QString("Warning: ");
        break;
    case QtCriticalMsg:
        text = QString("Critical:");
        break;
    case QtFatalMsg:
        text = QString("Fatal: ");
        break;
    default:
        text = QString("Debug: ");
    }
 
    // 設(shè)置輸出信息格式
    QString context_info = QString("F2:(%1) L:(%2)").arg(QString(context.file)).arg(context.line); // F文件L行數(shù)
    QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
    QString strMessage = QString("%1 %2 \t%3 \t%4").arg(text).arg(context_info).arg(strDateTime).arg(msg);
    // 輸出信息至文件中(讀寫、追加形式)
    QFile file(CODE_SYSTEM_BACKER_PATH+QString(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss").append("-log.txt")));
    file.open(QIODevice::ReadWrite | QIODevice::Append);
    QTextStream stream(&file);
    stream << strMessage << "\r\n";
    file.flush();
    file.close();
    // 解鎖
    mutex.unlock();
}

4.3、增加注冊信息

int main(int argc, char *argv[])
{
    //注冊MessageHandler
    qInstallMessageHandler(outputMessage); //注冊MessageHandler
 
    QApplication a(argc, argv);
    MainWindow w; 
    w.show();
    return a.exec();
}

5、注意事項

Release版本稍許有些不同,需要引用DEFINES += QT_MESSAGELOGCONTEXT到Pro中

到此這篇關(guān)于Qt打印信息輸出到日志文件中的兩種方法的文章就介紹到這了,更多相關(guān)Qt打印信息輸出到文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 論C++的lambda是函數(shù)還是對象

    論C++的lambda是函數(shù)還是對象

    這篇文章主要介紹了論C++的lambda是函數(shù)還是對象,對于有捕獲的lambda,其等價于對象。對于沒有任何捕獲的lambda,其等價于函數(shù),下面來看看具體的相關(guān)內(nèi)容,需要的朋友可以參考一下
    2022-02-02
  • C++編程中的格式化輸出詳解

    C++編程中的格式化輸出詳解

    這篇文章主要介紹了C++編程中的格式化輸出詳解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C語言中回調(diào)函數(shù)的使用詳情

    C語言中回調(diào)函數(shù)的使用詳情

    這篇文章主要介紹了C語言中回調(diào)函數(shù)的使用詳情,閱讀下文我們將學(xué)習(xí)到架構(gòu)的核心理念和需、回調(diào)函數(shù)的作用、回調(diào)函數(shù)的程序編寫等內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • 利用OpenCV實現(xiàn)局部動態(tài)閾值分割

    利用OpenCV實現(xiàn)局部動態(tài)閾值分割

    這篇文章主要為大家詳細(xì)介紹了利用OpenCV實現(xiàn)局部動態(tài)閾值分割,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 詳解C語言中結(jié)構(gòu)體的自引用和相互引用

    詳解C語言中結(jié)構(gòu)體的自引用和相互引用

    這篇文章主要介紹了C語言中結(jié)構(gòu)體的自引用和相互引用,詳細(xì)解析了結(jié)構(gòu)體中指針的指向情況,需要的朋友可以參考下
    2016-04-04
  • Qt中判斷QRadioButton選中狀態(tài)的多種方法

    Qt中判斷QRadioButton選中狀態(tài)的多種方法

    QRadioButton(單選按鈕)通常以分組形式出現(xiàn),用戶在同一組中只能選擇一個選項,本文將詳細(xì)介紹在Qt中判斷當(dāng)前選中QRadioButton的多種方法,包含代碼示例、最佳實踐和常見問題解決方案,需要的朋友可以參考下
    2026-01-01
  • C++實現(xiàn)LeetCode(309.買股票的最佳時間含冷凍期)

    C++實現(xiàn)LeetCode(309.買股票的最佳時間含冷凍期)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(309.買股票的最佳時間含冷凍期),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • c++大數(shù)階乘的實現(xiàn)方法

    c++大數(shù)階乘的實現(xiàn)方法

    本篇文章對c++的大數(shù)階乘進(jìn)行了代碼示例的介紹。需要的朋友參考下
    2013-05-05
  • 詳解C語言通過遞歸與非遞歸實現(xiàn)蛇形矩陣

    詳解C語言通過遞歸與非遞歸實現(xiàn)蛇形矩陣

    蛇形矩陣(Snake matrix)是矩陣的一種,常被應(yīng)用在編程題目與數(shù)學(xué)數(shù)列中,需要提取每條斜線里最小的數(shù)字,本篇文章將會通過遞歸和非遞歸來分別實現(xiàn)蛇形矩陣
    2022-02-02
  • C++關(guān)于指針,繼承和多態(tài)介紹

    C++關(guān)于指針,繼承和多態(tài)介紹

    大家好,本篇文章主要講的是C++關(guān)于指針,繼承和多態(tài)介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01

最新評論

公主岭市| 甘泉县| 新竹县| 鹰潭市| 鞍山市| 元江| 盈江县| 闻喜县| 眉山市| 汉川市| 大方县| 盐池县| 枣阳市| 深圳市| 前郭尔| 汉沽区| 洞头县| 瓦房店市| 永顺县| 汉源县| 威信县| 石屏县| 夹江县| 平顶山市| 阿坝县| 榕江县| 福贡县| 珠海市| 盱眙县| 通海县| 景洪市| 阿鲁科尔沁旗| 托克托县| 南汇区| 昌平区| 宁武县| 邵阳县| 公主岭市| 稻城县| 吉林省| 京山县|