qDebug不输出任何东西

时间:2020-09-14 04:58:53

标签: c++ qt

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

[编辑] 我已经检查了“在终端中运行”,然后清理并重建项目,它现在与“ qtcreator_process_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

MainWindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QtWidgets/QPushButton"
#include "QDebug"
#include <iostream>

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->addTaskButton, &QPushButton::clicked, this, &MainWindow::addTask);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::addTask()
{
qDebug()<<"Debug button";
qInfo()<<"Information output";
qWarning()<<"Warning output";
qCritical()<<"Critical output";
}

我已经花了两天时间在Google上进行搜索,但所有答案都是关于未定义的QT_NO_DEBUG_OUTPUT的,但已定义。 我尝试过的 包括“ QtDebug”而不是“ qDebug” 创建具有以下内容的qtlogging.ini:-

[Rules]
*.debug=true

每次编辑后尝试进行干净的构建(清理并重建项目)

规格:

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

V4.13和Qt V5.15.1

CMake V3.18.2

制作V4.3

QMake V3.1

2 个答案:

答案 0 :(得分:1)

要查看 lggoing 输出,您需要:

  1. 将您的项目配置为具有控制台
  2. 通过在构建时定义 QT_NO_DEBUG 确保没有禁用 qDebug() (切换到调试版本)。
  3. 确保系统/usr 配置文件没有禁用日志记录。
  4. 如果加入现有项目,请检查是否调用了 qInstallMessageHandler(),在这种情况下,他的输出可能会被重定向到某处。
  5. 如果加入现有项目,请确保调用 setSeverity 不会抑制日志记录(在新的 Qt Creator 项目中不是问题)。

步骤 1:要为您的应用程序配置控制台,添加

CONFIG += console

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

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

为此,您可以使用左下角的 Qt Creator 的 gui。这会将 .proj 文件中的 CONFIG 从“发布”切换到“调试”。其中,除其他外,告诉 qmake 不要生成使用 -DQT_NO_DEBUG 调用编译器的 makefile。因为这会禁用 qDebug 级别的日志记录。 或者,自己编辑 .pro 文件并重新运行 qmake,然后重新编译。

第 3 步:检查日志配置文件

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

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

在我的系统上,这意味着我有一个 $ cat /usr/share/qt5/qtlogging.ini [Rules] *.debug=false

$ export QT_LOGGING_RULES='*.debug=true'

$ ./my_program

要在命令行上手动覆盖它,您可以设置一个环境 命令行中的变量:

initOwner

您也可以在 Qt Creator 中编辑“构建环境”,如果您想全局禁用调试输出,但在 Qt Creator 中运行时会看到它。

我建议您阅读 QLoggingCategory - Logging Rules 以了解如何配置。另请参阅 this fedora 票证,了解默认情况下禁用的更改。

答案 1 :(得分:0)

只要在Qt Creator中的Projects-> Run-> Run in Terminal中检查它是否被选中。如果已选中,请取消选中它,然后重新运行程序。