通常,当我需要调试某些内容时,使用qDebug()
打印某些内容比使用调试器逐步调试更容易。问题是有时根本不显示qDebug()
的输出!qWarning
和qCritical
也是如此.奇怪的是,它仅在正常运行项目(Ctrl + R)时发生,而在调试(F5)时显示输出。
解决方案很简单:将CONFIG += console
添加到 .pro 文件并重新生成整个项目。
对我来说的解决方案,如 https://bugzilla.redhat.com/show_bug.cgi?id=1227295#c10 中所述:
- 在
/etc/xdg/QtProject/
寻找qtlogging.ini
。 - 编辑当前文件(如果缺少文件,则
qtlogging.ini
创建文件)
[Rules] *.debug=false
自
[Rules] *.debug=true qt.*.debug=false
- 重新编译并检查!
如果您正在运行多个Qt Creator实例,qDebug将无法正常工作。
我遇到了同样的问题,这里的答案都没有帮助我。我在这里找到了解决方案:https://lists.fedoraproject.org/archives/list/kde@lists.fedoraproject.org/thread/SB6QJZGVDLWWBZCMTNKMVZSSPPNREOYJ/
我必须设置 QT_ASSUME_STDERR_HAS_CONSOLE=1。这可以在代码中完成:
qputenv("QT_ASSUME_STDERR_HAS_CONSOLE", "1");
或者更好的是"环境"下的"套件"设置。
的解决方案使用
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
日志记录规则从日志记录配置文件中的 [规则] 部分自动加载。这些配置文件在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
将启动脚本放置在:
/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 这样的终端来启动、分离、使用 QProcess 类启动另一个 Qt 应用程序的 Qt 应用程序(在我的例子中,在一个有多个子项目的项目中),第一个中的 readyReadStandardError() 信号会正确获得第二个信号的 stdrr,直到进程之间的通信中断时终端关闭。我解决了第二个问题,添加了
qputenv("QT_ASSUME_STDERR_HAS_CONSOLE", "1");
主要.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();
}