Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ qDebug没有';我什么也不输出_C++_Qt - Fatal编程技术网

C++ qDebug没有';我什么也不输出

C++ qDebug没有';我什么也不输出,c++,qt,C++,Qt,我刚刚开始使用Qt Creator V4.13和Qt V5.15.1学习Qt,当我使用qDebug()、qInfo()、qWarning()和qCritical()时,应用程序输出中没有显示任何内容 [编辑] 我已经检查了“磨合终端”,然后清理和重建项目,现在它使用“qtcreator\u process\u sub”运行,需要qDebug的输出。 .pro文件 QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += w

我刚刚开始使用Qt Creator V4.13和Qt V5.15.1学习Qt,当我使用qDebug()、qInfo()、qWarning()和qCritical()时,应用程序输出中没有显示任何内容

[编辑] 我已经检查了“磨合终端”,然后清理和重建项目,现在它使用“qtcreator\u process\u sub”运行,需要qDebug的输出。

.pro文件

    QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

TRANSLATIONS += \
    ToDo_ar_EG.ts

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
MainWindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void addTask();

private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
每次编辑后都尝试了清理生成(清理并重新生成项目)

规格:

Arch Linux(系统是最新的,我刚刚更新过)

V4.13和Qt V5.15.1

CMake V3.18.2

使之成为V4.3


qmakev3.1

如果选中或未选中,只需在项目->运行->运行终端下签入QtCreator即可。如果选中,请取消选中并重新运行程序。

要查看LGGONG输出,您需要:

  • 将项目配置为具有控制台
  • 通过在生成时定义QT_NO_DEBUG,确保未禁用qDebug() (切换到调试版本)
  • 确保系统/usr配置文件未禁用日志记录
  • 如果加入现有项目,请检查是否调用了
    qInstallMessageHandler()
    ,在这种情况下,输出可能被重定向到某个地方
  • 如果加入现有项目,请确保对
    setSeverity
    的调用不会抑制日志记录(在新的Qt Creator项目中不是问题)
  • 步骤1:要为应用程序配置控制台,请添加

    CONFIG += console
    
    到.pro文件,然后重新运行qmake并重新生成。或者 在Qt Creator提供的运行配置gui中启用“使用控制台运行”

    步骤2:从“发布”切换到“调试”版本

    CONFIG += console
    
    为此,您可以使用左下角的Qt Creator gui。这会在.proj文件中将
    CONFIG
    从“release”切换到“debug”。其中,告诉qmake不要生成一个makefile,该makefile使用
    -DQT\u NO\u DEBUG
    调用编译器。因为这将禁用
    qDebug
    级别的日志记录。 或者,自己编辑.pro文件并重新运行qmake,然后重新编译

    步骤3:检查日志记录配置文件

    由于
    qInfo()
    在您的系统上也不起作用,因此在您的特定情况下,此步骤可能不是问题,但通常可能是个问题

    可以通过系统和/或日志配置文件中设置的规则选择性地启用或禁用日志记录。自2015年以来,主要linux发行版(ubuntu,fedora22+)通过发行版的Qt5包中包含的系统范围的
    qteloging.ini
    默认禁用了
    qDebug()
    级别

    在我的系统上,这意味着我有一个
    /usr/share/qt5/qtloging.ini

    $  cat /usr/share/qt5/qtlogging.ini
    [Rules]
    *.debug=false
    
    要在命令行上手动替代此选项,可以设置环境 来自命令行的变量:

    $ export QT_LOGGING_RULES='*.debug=true'
    
    $ ./my_program
    
    如果您希望全局禁用调试输出,但在Qt Creator中运行时可以看到它,那么您也可以在Qt Creator中编辑“构建环境”


    我建议您阅读如何配置它。另请参阅fedora ticket关于默认禁用的更改。

    它没有被取消选中,但我已经检查了它,它qtcreator\u process\u sub出现,qDebug消息正确显示在其中,idk如果这是预期的行为,当我取消选中它时,它返回到不工作状态。您需要一个控制台来查看日志。你要么按照Sumit的建议去做,要么在你的应用程序中添加一个控制台:
    CONFIG+=console
    这能回答你的问题吗?
    $ export QT_LOGGING_RULES='*.debug=true'
    
    $ ./my_program