没有 QApplication 无法创建 QWidget

Posted

技术标签:

【中文标题】没有 QApplication 无法创建 QWidget【英文标题】:Cannot create a QWidget without QApplication 【发布时间】:2016-04-30 06:38:24 【问题描述】:

当我编译我的 qt 项目时显示以下错误?

QWidget: Cannot create a QWidget without QApplication

有什么问题?

Main.cpp

#include<QApplication>
#include"MainWindow.h"

int main(int argc, char *argv[])

    QGuiApplication app(argc, argv);
    MainWindow w;
    w.show();
    return app.exec();

【问题讨论】:

【参考方案1】:

您需要QApplication 才能拥有QWidget。把QGuiApplication改成QApplication,代码就可以正常运行了。

#include <QApplication>
#include "MainWindow.h"

int main(int argc, char *argv[])

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

如果你想知道“为什么会有 QApplication、QGuiApplication 和 QCoreApplication 这三个主要类”,请参阅this。它说:

QCoreApplication 是基类,QGuiApplication 扩展了基类 具有与处理窗口和 GUI 内容相关的功能的类 (非小部件相关,例如 OpenGL 或 QtQuick),QApplication 扩展 具有与处理小部件相关的功能的 QGuiApplication。

顺便说一句,这不是 Qt Creator 上可用的基本示例吗?你需要一本书来学习 Qt,我建议你阅读 Jasmin Blanchette 的“C++ GUI Programming with Qt 4 (2nd Edition)”。

【讨论】:

本书不会介绍 QGuiApplication 和 QApplication 之间的关键区别,因为它是关于 Qt 4 的,而 QGuiApplication 是在 Qt5 中引入的。 @FrankOsterfeld 我在qtcentre.org/threads/60203 中提到了QApplication、QGuiApplication 和QCoreApplication 之间的区别。你知道一本好的 Qt5 书吗?【参考方案2】:

您应该在主目录中将 QGuiApplication 更改为 QApplication

来自QGuiApplication Class Description:

对于基于 QWidget 的 Qt 应用程序,请改用 QApplication,因为它 提供创建 QWidget 实例所需的一些功能。

【讨论】:

以上是关于没有 QApplication 无法创建 QWidget的主要内容,如果未能解决你的问题,请参考以下文章

在主函数(库)之外实例化 QApplication

QApplication无显示

隐藏新 QApplication() 的 Python 启动器图标

如何在PySide / PyQt中连接QApplication()和QWidget()对象?

无法连接来自 QApplication 的 aboutToQuit 信号

无法打开源文件QtWidgets/QApplication