首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qDebug没有输出任何东西

qDebug没有输出任何东西
EN

Stack Overflow用户
提问于 2020-09-14 04:58:53
回答 2查看 1.4K关注 0票数 0

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

编辑我选中了“运行在终端”,然后清理和重建项目,现在使用"qtcreator_process_sub“运行qDebug.所需的输出。

.pro文件

代码语言:javascript
复制
    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文件

代码语言:javascript
复制
#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文件

代码语言:javascript
复制
#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";
}

我花了两天时间在谷歌搜索,但所有的答案都是关于未定义的QT_NO_DEBUG_OUTPUT,但它是定义的。我尝试过的是:包含"QtDebug“而不是"qDebug”,用内容创建qtlogging.ini:-

代码语言:javascript
复制
[Rules]
*.debug=true

每次编辑后尝试一个干净的构建(清理和重建项目)。

规格:

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

V4.13和Qt V5.15.1

CMake V3.18.2

制造V4.3

QMake V3.1

EN

回答 2

Stack Overflow用户

发布于 2021-04-02 01:19:43

要查看日志输出,您需要:

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

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

代码语言:javascript
复制
CONFIG += console

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

步骤2:从“版本”切换到“调试”生成

为此,您可以在左下角使用的gui。这会将CONFIG从“释放”切换到.proj文件中的“调试”。它告诉qmake不要生成一个makefile,它用-DQT_NO_DEBUG调用编译器。因为这将禁用qDebug-level日志记录。或者,自己编辑.pro文件并重新运行qmake,然后重新编译。

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

由于qInfo()在您的系统上都不起作用,所以这一步在您的特定情况下可能不是问题,但它通常是一个问题。

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

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

代码语言:javascript
复制
$  cat /usr/share/qt5/qtlogging.ini
[Rules]
*.debug=false

若要在命令行中手动重写此操作,可以从命令行中设置环境变量:

代码语言:javascript
复制
$ export QT_LOGGING_RULES='*.debug=true'

$ ./my_program

您还可以编辑Qt中的"build环境“,如果要使调试输出保持全局禁用,但是在Qt中运行时可以看到它。

我建议您阅读QLoggingCategory日志规则来了解如何配置它。还请参阅关于默认禁用更改的 fedora票证。

票数 1
EN

Stack Overflow用户

发布于 2020-09-14 05:16:26

只要签入unchecked下的Projects->Run->运行在终端,如果它被选中或未被选中。如果它被选中,取消检查并重新运行程序.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63878316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档