使调试消息显示在弹出窗口而不是QtCreator面板中

时间:2019-02-11 19:57:02

标签: qt

我希望看到调试消息显示在弹出窗口(例如cmd窗口)中,而不是显示在Qt Creator面板中,特别是在其“应用程序输出”中。我放了CONFIG += console。但它只提供一个空窗口。为了演示,下面是一个简单的cpp文件生成调试消息:

#include "mytimer.h"

myTimer::myTimer(QObject *parent) : QThread(parent)
{
    moveToThread(this);

    QTimer timer;
    timer.setInterval(1000);
    timer.start();


    connect(&timer,SIGNAL(timeout()),this,SLOT(timerHandler()), Qt::DirectConnection);
    exec();

    timer.stop();
}

void myTimer::timerHandler()
{
    qDebug()<<"timerHandler called"; //here is a debug message
}

myTimer::~myTimer()
{
    quit();
    wait();
}

接下来是.pro文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Timer
TEMPLATE = app

CONFIG += console

SOURCES += \
        main.cpp \
        mainwindow.cpp \
    mytimer.cpp

HEADERS += \
        mainwindow.h \
    mytimer.h

FORMS += \
        mainwindow.ui

2 个答案:

答案 0 :(得分:2)

您说的是“弹出式”窗口,但是随后您提到了cmd窗口,因此我不确定您到底想要什么。

如果要将错误消息重定向到终端窗口,请在运行设置中选中“在终端中运行”框。您可能还必须使用cout代替qDebug()。

如果您想要一个真实的弹出窗口,则需要创建一个小部件。我建议使用QMessageBox,因为它非常易于使用。

QMessageBox *qmb;
qmb = new QMessageBox(QMessageBox::NoIcon,
                title,
                text,
                QMessageBox::Ok,
                this);
qmb->exec();
delete qmb;

很难说为什么看不到任何输出-可能是操作系统,也可能是应用程序受阻(尽管我猜不是)。在调用qDebug()之后,您总是可以尝试使用旧的fflush(stdout);

答案 1 :(得分:0)

您可以在项目运行设置中指定“在终端中运行”。这样,即使您有gui应用程序,调试输出也将显示在自己的文本窗口中。请参见manual

中的“为桌面设备类型指定运行设置”