QtCreator:如何最好地将字符串打印到终端?

3

我正在学习在lubuntu 17.10上使用Qtcreator,并希望将一些输出打印到终端。但我遇到了问题,所以我将我的程序简化为一个基本的“Hello World”,只打印一个字符串到终端。目前,我正在使用以下代码:

#include <QCoreApplication>
#include <iostream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    std::cout << "HELLO WORLD" << std::endl;
    return a.exec();
}

我的.pro文件包含以下几行,它们似乎会影响终端的行为:

QT -= gui

CONFIG += c++11 console

我还勾选了运行设置中的“在终端中运行”选项。
这个构建没有问题。当我运行它时,终端弹出(我正在使用terminator),并且是空白的,有一个闪烁的光标。要让字符串出现,我必须按下<Enter>。字符串出现了,但程序没有结束。我没有在终端中得到“按回车键关闭窗口”的消息类型,这表明程序已结束,我必须“手动”关闭终端。此外,在应用程序输出窗口中,它显示:
/home/user/path_to_my_program crashed.

可能是因为我强制关闭了终端。我真的想弄清楚为什么它没有将字符串打印到终端并干净地退出。

按ENTER键后的终端(之前是空白的):

enter image description here


@标记器 不确定你指的是哪些其他文件.. .pro 文件的其余部分只列出了 main.cpp 源代码,并包含一个与使用过时内容时警告相关的选项 - Totem
输出是缓冲的。通常换行符或endl会刷新缓冲区,或者您可以使用std::flush - Retired Ninja
@RetiredNinja 谢谢。这确实会使输出在不需要按回车键的情况下显示出来...尽管有点奇怪,它并不总是起作用...但这并不改变强制关闭终端的需求。 - Totem
3
你的应用程序没有按照你期望的方式终止,因为你调用了 a.exec() -- 它正在等待处理事件。 - G.M.
1
在这种方式下,您并没有真正创建一个Qt应用程序.. 当您去掉a.exec()时... 还要去掉 QCoreApplication a(argc, argv); .. 最后你得到的是一个带有几个命令的C++ main()函数.. 在Qt实践中,使用qDebug()来打印到终端.. 这应该解决您的第一个问题。 - Mohammad Kanan
显示剩余6条评论
1个回答

0

对于 Qt 控制台应用程序而言,这是正常的。它正在运行消息循环并且正按照预期执行。 要向控制台发送文本,您可以使用 std::cout、qout 或 qDebug()。后者用于调试。可以在此处找到更多信息。它还包含您可能遇到的陷阱。Qt 控制台应用程序


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