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

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

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

1、簡(jiǎn)述

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

2、效果圖

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

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

找到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、增加注冊(cè)信息及記錄到文件中

int main(int argc, char *argv[])
{
    //注冊(cè)MessageHandler
    qInstallMessageHandler(outputMessage); //注冊(cè)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、增加注冊(cè)信息

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

5、注意事項(xiàng)

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

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

相關(guān)文章

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

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

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

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

    這篇文章主要介紹了C++編程中的格式化輸出詳解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    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實(shí)現(xiàn)局部動(dòng)態(tài)閾值分割

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

    這篇文章主要為大家詳細(xì)介紹了利用OpenCV實(shí)現(xiàn)局部動(dòng)態(tài)閾值分割,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    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),用戶在同一組中只能選擇一個(gè)選項(xiàng),本文將詳細(xì)介紹在Qt中判斷當(dāng)前選中QRadioButton的多種方法,包含代碼示例、最佳實(shí)踐和常見問題解決方案,需要的朋友可以參考下
    2026-01-01
  • C++實(shí)現(xiàn)LeetCode(309.買股票的最佳時(shí)間含冷凍期)

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

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

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

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

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

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

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

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

最新評(píng)論

岢岚县| 视频| 鹿泉市| 蓝山县| 江达县| 仁布县| 南开区| 高唐县| 山东省| 庆元县| 屏东县| 治多县| 松桃| 金秀| 彝良县| 古丈县| 吉水县| 平山县| 湄潭县| 铜鼓县| 司法| 同心县| 内黄县| 新巴尔虎右旗| 浪卡子县| 乐陵市| 时尚| 永德县| 九江县| 贡山| 丰城市| 镇安县| 云浮市| 航空| 贵溪市| 县级市| 辽源市| 黄石市| 永寿县| 左权县| 余江县|