2012-08-02 211 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

相关问题