Qt的qDebug在QConsoleApplication或QApplication中无法工作

8

我在使用Qt和Qt Creator编写程序时遇到了一个非常恼人的问题。每当我尝试在使用qDebug()之前实例化QCoreApplicationQApplication时,无论我是在Qt Creator中运行程序还是从普通Shell中运行程序(我用的是Fedora Linux),都不会输出任何内容。例如,即使是下面这个简单的代码也会失败:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << "TestOutput!" << endl;
}

有人知道如何解决这个问题吗? 提前感谢, Marius


你是在调试模式下构建吗? - Frank Osterfeld
你要将输出放在哪里? - demonplus
您可以像这样检查您的.pro文件中是否定义了QT_NO_DEBUG_OUTPUTDEFINES += QT_NO_DEBUG_OUTPUT,或者在代码中某个地方可能已经#define了它。如果存在,则删除该代码片段。 - Ankit
已经检查过了,没有发现任何问题。我还尝试添加了一个不同的消息处理程序,但似乎从未被调用过。我相信这个问题与我的系统配置有关,但我无法找出问题所在。 - marius_linux
我的答案已经在这篇文章中得到了很好的记录:https://stackoverflow.com/questions/26295325/where-is-located-the-qdebug-qwarning-qcritical-and-qfatal-log-by-default-on-qt - Dan
显示剩余4条评论
4个回答

9

为了更好的格式,我添加了这个新的解决方案,marius还是在这个bugzilla中自己找到的。

编辑~/.config/QtProject/qtlogging.ini并添加:

[Rules]
*.debug=true
qt.qpa.input*.debug=false

最后一行是为了禁用针对"移动鼠标"消息的垃圾调试日志记录。

在我的系统中,这个文件位于/etc/xdg/QtProject/。 - Paul Wintz
我猜在/etc/xdg/QtProject/编辑文件会应用于所有用户的设置(需要root权限进行编辑),而答案中的路径(如果缺失则创建文件夹/文件)仅适用于单个用户。 - Mathias
在我的系统上(Fedora 29),它是/usr/share/qt5/qtlogging.ini - SteeveDroz
"/usr/share/qt5/" = [QLibraryInfo::DataPath]/qtlogging.ini。这是全局日志记录设置的文档位置。 - wheredidthatnamecomefrom

5

这方面的文档可以在这里找到:http://doc.qt.io/qt-5/qloggingcategory.html#details

它可以以多种方式进行配置。以下是一些有用的示例:

通过环境变量(cmd):

$ export QT_LOGGING_RULES="*.debug=true" ./app

通过环境变量(export):

$ QT_LOGGING_RULES="*.debug=true"
$ ./app

或者在代码中:

#include <QCoreApplication>
#include <QLoggingCategory>
int main(int argc, char *argv[])
{
  QCoreApplication a(argc, argv);
  QLoggingCategory::setFilterRules("*.debug=true");
  qDebug() << "Debugging;
  a.exit();
}

这对我非常有效 - 尽管最终我使用了“default.debug=true”以避免除了我的应用程序之外的所有内容都弹出调试消息。 - GeekyDeaks
如果您从特定模块接收到大量调试消息,例如关于鼠标移动的信息,您可以在环境变量中指定多个过滤器。例如:QT_LOGGING_RULES="*.debug=true;qt.widgets.gestures.debug=false" - Ole Wolf

1

如在bugzilla中建议的那样,我添加了~/.config/QtProject/qtlogging.ini文件,并包含以下内容:[Rules] *.debug=true qt.qpa.input*.debug=false最后一行是为了在任何地方禁用“鼠标移动”消息。 - Mathias

0
这个对我很有帮助(在用户的bashrc文件中):
export QT_LOGGING_DEBUG=1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接