2012-08-02 210 views

回答

2

要QDebug重定向到多個地方,你可能需要編寫一些代碼,也許是這樣的:

QList<QtMsgHandler> messageHandlers_; 

static void messageDispatcher(QtMsgType type, const char *msg) 
{ 
    foreach (QtMsgHandler callback, ::messageHandlers_) 
    callback(type, msg); 
} 

static void messageLogger(QtMsgType type, const char *msg) 
{ 
    QString output; 
    switch (type) { 
    case QtDebugMsg: output = QString("mesage: %1\n").arg(msg); break; 
    case QtWarningMsg: output = QString("warning: %1\n").arg(msg); break; 
    case QtCriticalMsg: output = QString("critical: %1\n").arg(msg); break; 
    case QtFatalMsg: output = QString("fatal: %1\n").arg(msg); break; 
    default: return; 
    } 

    QFile file("log.txt"); 
    if (file.open(QIODevice::WriteOnly | QIODevice::Append)) 
    QTextStream(&file) << output; 
} 

int main() 
{ 
    ... 
    ::messageHandlers_.append(messageLogger) 
    qInstallMsgHandler(messageDispatcher); 
    ... 
} 
+0

此代碼不起作用。不知道是否因爲代碼示例中的拼寫錯誤(其中似乎至少有一個)或者因爲Qt自2013年以來已取得進展,並且答案使用了不推薦的調用。 – 2017-04-08 10:17:24

6

您可以輸出一切控制檯或一切Qt Creator中的應用程序輸出面板。

爲了完整起見:如果您想要在面板而不是控制檯中輸出所有輸出,可以在Project-> Run settings中取消選中「在終端中運行」。

+0

我知道......但我想輸出到兩個不同的地方......這就是爲什麼它的調試輸出。 – Eugene 2012-10-05 01:35:08

+0

不幸的是,你不能這樣做。 – Bojan 2012-10-05 08:17:21

+2

我有「運行終端」未選中,仍然沒有看到我的應用程序的任何輸出。 std :: cout,qDebug不會輸出任何東西 – Dmitriy 2014-02-01 11:34:03

相關問題