cout在QtCreator中无法打印

14

我已经在这个论坛上看到了这个问题,但我不知道为什么提出的答案在我的情况下不起作用。因此,我尝试寻求其他解决方案。

我刚刚在Linux下运行了Qt Creator。

我不明白为什么我的:

cout << "This does not appear";

使用qDebug可以在控制台打印,而不是使用cout时无法打印

qDebug() << "This appears";

以下是我的 .pro 文件中包含的内容:

QT       += core gui

TARGET = aaa
TEMPLATE = app


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

HEADERS  += mainwindow.h \
    IeplcModule.h

FORMS    += mainwindow.ui

#enable console
CONFIG += console

有任何想法吗?


2
cout << "This does not appear" << flush;也许是这个? - Michas
1
程序停止后,输出是否显示出来?如果是,那可能只是缺少刷新(添加std::endl)。 - Steffen
调试输出直接显示。<iostream> 中与 qDebug() 等效的是 cerr <<,它也不需要刷新。 - MSalters
6个回答

30

尝试以下方法:

cout << "asdf" << endl;

可能Qt设置iostream以便仅在换行时刷新。


5
顺便说一下,你提供了正确的答案和解释,并没有像其他人那样建议使用qDebug()。+1 - RajaRaviVarma
实际上,endl 是一个换行符 加上 刷新命令。类似于 "\n" << flush - steffen

3
当使用CDB(Windows调试器)进行调试并在QtCreator输出面板中而非专用终端窗口中运行应用程序时,存在一个有关std::cout/std::cerr问题。 qDebug之所以有效是因为在这种情况下它有一个技巧。 因此,在这种情况下唯一的解决方案是启用“在终端中运行”选项。 有关更多信息,请访问上面链接到Qt bug跟踪器。

1
你有写 #include <iostream> 吗?我在代码里没有看到任何的 include。 我猜 qdebugcout 很相似。

1
这个问题已经被接受的答案解决了。 - Austin Henley

1

0

你可以从命令提示符中运行此程序,它将在控制台打印一些消息:

/* Create a .pro file with this content:
QT += core gui widgets
SOURCES += main.cpp
TARGET = app
-------------------------------
Build and run commands for CMD:
> qmake -makefile
> mingw32-make
> "release/app"
*/

#ifdef _WIN32
#include <windows.h>
#endif

#include <QtCore/QFile>
#include <QtCore/QString>
#include <QtCore/QIODevice>
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>

#include <iostream>

class Widget : public QWidget
{
public:
    Widget()
    {
        setWindowTitle("My Title");
        QString path("assets/text.txt");
        std::cout << std::endl;
        std::cout << "hello1" << std::endl;
        std::cout << path.toStdString() << std::endl;
        std::cout << "hello2" << std::endl;
    }
};

int main(int argc, char *argv[])
{
#ifdef _WIN32
    if (AttachConsole(ATTACH_PARENT_PROCESS))
    {
        freopen("CONOUT$", "w", stdout);
        freopen("CONOUT$", "w", stderr);
    }
#endif

    QApplication app(argc, argv);
    Widget w;
    w.show();
    return app.exec();
}

0

请确保您在.pro文件中启用了console配置。例如:

CONFIG += console

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接