【问题标题】:Qt - QWidget: Cannot create a QWidget when no GUI is being usedQt - QWidget:不使用 GUI 时无法创建 QWidget
【发布时间】:2011-07-28 03:55:43
【问题描述】:

我正在尝试运行一个简单的Qt 程序,这样做时,我得到一个控制台窗口提及:QWidget: Cannot create a QWidget when no GUI is being used,第二行This application has requested the Runtime to terminate.....,因此.exe 文件停止工作。

我的.pro 文件如下所示:

#-------------------------------------------------
#
# Project created by QtCreator 2011-04-02T07:38:50
#
#-------------------------------------------------

QT       += core

QT       += gui

TARGET = Hello
CONFIG += console
CONFIG += qt
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp

对此有什么想法吗?

谢谢。

【问题讨论】:

    标签: c++ qt qwidget


    【解决方案1】:

    从文档中, QApplication 类管理 GUI 应用程序的控制流和主要设置,同时 QCoreApplication 类为控制台 Qt 应用程序提供事件循环

    我遇到了同样的问题,默认的 QT Console App 使用 QCoreApplication 而不是 QApplication 来运行应用程序。

    这是我为使它工作所做的工作

    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        QWidget widget;
    
        widget.show();
    
        return a.exec();
    }
    

    我没有更改我的项目文件中的任何内容

    QT       += core
    
    QT       += gui
    
    TARGET = Layouts
    CONFIG   += gui
    CONFIG   -= app_bundle
    
    TEMPLATE = app
    
    
    SOURCES += main.cpp
    

    【讨论】:

      【解决方案2】:

      当您的应用程序不是 QApplication 实例时,会发生“QWidget:未使用 GUI 时无法创建 QWidget”。 来自Qt docs

      QApplication 专门为 QGuiApplication 提供了一些功能 基于 QWidget 的应用程序需要。它处理特定的小部件 初始化、结束,并提供会话管理。

      对于任何使用 Qt 的 GUI 应用程序,只有一个 QApplication 对象,无论应用程序是否有 0、1、2 个或更多窗口 在任何给定时间。对于非基于 QWidget 的 Qt 应用程序,请使用 而是 QGuiApplication,因为它不依赖于 QtWidgets 图书馆。

      【讨论】:

        【解决方案3】:

        我发现你可以使用 Qt 控制台项目来做到这一点,但是当你完成我的编辑后,它当然不会具有控制台程序的功能。

        首先,您需要在您的main.cpp(您开始应用程序的地方)中将#include &lt;QtCoreApplication&gt;#include &lt;QApplication&gt; 交换

        main(int,char**){

        QApplication a(argc, argv);交换QCoreApplication a(argc, argv);

        在 QApplication 和 return a.exec 之间,你有你的小部件和其他 gui 相关的东西

        最后你使用return a.exec();}

        【讨论】:

          【解决方案4】:

          我想我找到了问题所在。

          由于我使用的是Qt Creator,并且在创建新项目时,我选择了Qt Console Application 而不是Qt Gui Application

          【讨论】:

          • 是的,Qt 控制台应用程序将创建非 gui 的 QtCoreApplication 并为您启动一个控制台。您应该改用 QtApplication。
          • 另外注意:GUI 需要QApplicationQT+=gui,而控制台需要使用QCoreApplicationCONFIG+=console。无论您如何链​​接,都无法使用QT+=gui 显示控制台。 (你可以有两个可执行文件,或者让一个调用另一个,或者从你的 GUI 应用程序中实现你自己的类似控制台的东西。)
          • 我的问题是一样的。通过将“QtCoreApplication”更改为“QtApplication”,它起作用了。
          【解决方案5】:

          问题不在于这个.pro;最有可能在main.cpp 中。 Qt 要求您在创建任何 QWidget 子类(以及某些其他类,例如 QPixmap)之前创建一个 QApplication。您的 main 函数应以以下行开头:

          QApplication app(argc, argv);
          

          可能会以如下一行结尾:

          return app.exec();
          

          在这些调用之间,您应该创建并显示您的主窗口。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-23
            • 1970-01-01
            • 2011-04-30
            • 1970-01-01
            相关资源
            最近更新 更多