通常,当我需要调试某些内容时,使用
qDebug()
打印某些内容比使用调试器逐步调试更容易。
问题是有时根本不显示 qDebug()
的输出!与 qWarning
和 qCritical
相同。奇怪的是,只有正常运行项目(Ctrl+R)时才会出现这种情况,而调试(F5)时才会出现输出。
解决办法很简单: 将
CONFIG += console
添加到您的 .pro 文件并重建整个项目。
对我来说的解决方案,如https://bugzilla.redhat.com/show_bug.cgi?id=1227295#c10中所述是:
qtlogging.ini
中寻找 /etc/xdg/QtProject/
.qtlogging.ini
,如果丢失)[Rules] *.debug=false
到
[Rules] *.debug=true qt.*.debug=false
我遇到了同样的问题,这里的答案都没有帮助我。我在这里找到了解决方案:https://lists.fedoraproject.org/archives/list/[电子邮件受保护]/thread/SB6QJZGVDLWWBZCMTNKMVZSSPPNREOYJ/
我必须设置环境变量
QT_ASSUME_STDERR_HAS_CONSOLE=1
。这可以用代码完成:
qputenv("QT_ASSUME_STDERR_HAS_CONSOLE", "1");
或者在“环境”下的“套件”设置中更好。
如果您正在运行 Qt Creator 的多个实例,qDebug 将无法正常工作。
我使用这个问题的解决方案
Windows 10 Education
Qt Creator (5.x)
Developing a Qt widget.
问题:
所以我的问题是,每当我添加
QDebug
消息时,它都不会显示在应用程序输出中,尽管我的代码与教程中的代码 100% 相同并且编译得很好。
解决方案:
右键单击添加了
QDebug
消息的文件,对我来说是 main.cpp
。单击构建。按底部的绿色箭头。
如果这仍然不起作用,请转到“Build”->“CleanAll”、“Build”->“qMake”,然后再次选择绿色箭头。
当然,您必须
#include <QDebug>
并检查代码中的拼写是否正确。
就我而言,不知何故我忘记单击“配置项目”。我正在使用 QTCreator 4.11 和 Qt5.14。当我创建项目时,我没有在创建过程即将结束时单击“配置项目”。
Qt5.14.2、QtCreator 4.12.0: 对我有用的是取消选择“项目”->“运行”->“在终端中运行”... 呃!
您必须配置日志记录规则。请参阅文档。
格式为:
<category>[.<type>] = true|false
日志记录规则会自动从日志记录配置文件中的 [Rules] 部分加载。这些配置文件在 QtProject 配置目录中查找,或在 QT_LOGGING_CONF 环境变量中显式设置:
[Rules]
*.debug=false
driver.usb.debug=true
日志记录规则也可以在 QT_LOGGING_RULES 环境变量中指定;多个规则也可以用分号分隔:
QT_LOGGING_RULES="*.debug=false;driver.usb.debug=true"
例如:
QT_LOGGING_RULES="*.debug=true;qt.*=false"
通过添加解决:
export QT_ASSUME_STDERR_HAS_CONSOLE=1
将qtcreator启动脚本放置在:
/home/yourUsername/qtcreator-10.0.0/bin/qtcreator.sh
由从官方网站下载的应用程序提供。
#! /bin/sh
export QT_ASSUME_STDERR_HAS_CONSOLE=1
# Use this script if you add paths to LD_LIBRARY_PATH
# that contain libraries that conflict with the
# libraries that Qt Creator depends on.
makeAbsolute() {
case $1 in
/*)
# already absolute, return it
echo "$1"
;;
*)
# relative, prepend $2 made absolute
echo `makeAbsolute "$2" "$PWD"`/"$1" | sed 's,/\.$,,'
;;
esac
}
..
//some lines...
..
export LD_LIBRARY_PATH
exec "$bindir/qtcreator" -user-library-path "$_ORIGINAL_LD_LIBRARY_PATH" ${1+"$@"}.
更新:上述解决方案对 Qt Creator 有效。使用像 xterm 这样的终端来启动、分离一个 Qt 应用程序,该应用程序使用 QProcess 类来启动另一个 Qt 应用程序(在我的例子中,在一个具有多个子项目的项目中),第一个中的 readStandardError() 信号正确获取第二个的 stderr直到进程之间的通信中断时终端关闭。我解决了第二个问题添加
qputenv("QT_ASSUME_STDERR_HAS_CONSOLE", "1");
在main.cpp中这样:
#include "frmparman.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qputenv("QT_ASSUME_STDERR_HAS_CONSOLE", "1");
a.setStyle("windows");
frmParman w;
w.show();
return a.exec();
}