【QT随笔】一文完美概括QT中的QCoreApplication、QGuiApplication与QApplication(三大 Application 基类)

内容分享5天前发布
1 0 0

【QT随笔】一文完美概括QT中的QCoreApplication、QGuiApplication与QApplication(三大 Application 基类)

QCoreApplicationQGuiApplicationQApplication 是应用程序初始化和事件循环的三大 Application 核心类,它们的区别直接决定了应用的类型。本文在介绍过程中力求做到图、表、文并茂,以便轻松理解
QCoreApplication

QGuiApplication

QApplication

(关注不迷路哈!!!)

文章目录

【QT随笔】一文完美概括QT中的QCoreApplication、QGuiApplication与QApplication(三大 Application 基类)前言一、QCoreApplication📌 核心定位🔑 核心功能
二、QGuiApplication📌 核心定位🔑 核心功能详解
三、QApplication📌 核心定位🔑 核心功能
四、三大 Application 基类对比汇总1. QCoreApplication2. QGuiApplication3. QApplication4. 对比表(快速查阅)
五、三大 Application 基类示例代码1. QCoreApplication (非 GUI)2. QGuiApplication (QML/Quick 应用)3. QApplication (Widgets 应用)
总结


前言

QCoreApplication: 用于非 GUI 的 Qt 程序(后台、控制台、服务);QGuiApplication: 在 QCoreApplication 基础上,增加了 图形系统支持,但不含 WidgetsQApplication: 继承自 QGuiApplication,专为图形界面(GUI) 程序准备,支持多种 GUI 资源。

【QT随笔】一文完美概括QT中的QCoreApplication、QGuiApplication与QApplication(三大 Application 基类)

应用总结

👉 无界面 → QCoreApplication
👉 界面但不用 Widgets(QML/Quick) → QGuiApplication
👉 界面 + Widgets 控件 → QApplication


一、QCoreApplication


继承自 QObject,非GUI应用程序的基类

📌 核心定位

Qt 应用的基础类(所有应用必有的基类)。提供 事件循环(event loop)信号槽机制不依赖 GUI,适合 命令行、服务、后台进程

🔑 核心功能

事件循环管理

exec()
启动主事件循环。
quit()
/
exit()
控制应用退出。 事件投递与分发
支持
postEvent()

sendEvent()
。保证异步事件调度。 定时器支持

QTimer
依赖其事件循环。 命令行参数处理
在构造函数中解析
argc/argv
,支持 Qt 内置参数。 全局对象生命周期管理
提供
aboutToQuit
信号。负责清理 Qt 内部资源。


二、QGuiApplication


继承自 QCoreApplication,被继承于 QApplication

📌 核心定位

继承自 QCoreApplication,扩展 图形相关的功能QApplication 的父类。适合 QML/Qt Quick/OpenGL 应用 ——即需要 GUI,但不依赖传统 QWidget

🔑 核心功能详解

窗口系统集成
提供 顶层窗口管理(通过
QWindow
)。支持多窗口、多屏幕(如笔记本 + 外接显示器)。管理窗口事件(最小化、最大化、移动、关闭)。 输入事件处理
键盘输入(
QKeyEvent
)。鼠标事件(点击、移动、滚轮)。触摸/手势事件(
QTouchEvent

QGestureEvent
)。 屏幕与显示管理
通过
QScreen
管理显示设备信息:
分辨率 / DPI / 缩放比例。屏幕方向(横屏 / 竖屏)。多显示器支持。 图形系统资源
提供系统级字体(
QFont
)。光标样式管理(
QCursor
)。剪贴板支持(
QClipboard
)。输入法支持(虚拟键盘、多语言输入)。 高 DPI 与多平台适配
自动处理不同平台(Windows/macOS/Linux/Android/iOS)上的 DPI 缩放。提供跨平台一致的 UI 行为。

三、QApplication


GUI应用程序的基类继承自 QCoreApplication

📌 核心定位

继承自 QGuiApplication,进一步扩展。专为 桌面 GUI 应用(Widgets) 设计。提供 窗口、控件、图形渲染、输入处理

🔑 核心功能

继承 QGuiApplication 的功能
窗口系统集成输入事件处理(键盘、鼠标、触摸)屏幕管理(多显示器、DPI)字体、光标、剪贴板等系统资源 Widgets 管理
创建和管理 QWidget 控件(按钮、菜单、文本框等)。提供窗口层级管理。 GUI 样式与主题支持
通过
QStyle
管理平台外观。支持命令行参数
-style
主窗口与应用关闭机制
当最后一个窗口关闭时,自动退出事件循环(可配置)。 拖放与剪贴板扩展
与操作系统交互更紧密,支持丰富的数据传递。


四、三大 Application 基类对比汇总

1. QCoreApplication

最轻量:仅事件循环/信号槽。适合控制台程序、后台服务。模块依赖:
QT += core

2. QGuiApplication

增加图形系统支持:窗口、输入、屏幕、字体、剪贴板等。常用于 QML/Qt Quick/OpenGL 应用。模块依赖:
QT += core gui

3. QApplication

继承 QGuiApplication,额外支持 Widgets(按钮、菜单、对话框)。适合传统桌面应用。模块依赖:
QT += core gui widgets

4. 对比表(快速查阅)

特性/类别 QCoreApplication QGuiApplication QApplication
应用类型 非 GUI(控制台 / 服务 / 后台进程) GUI 应用(QML/Qt Quick / OpenGL) GUI 应用(基于 Widgets 的桌面应用)
继承体系 继承自
QObject
继承自
QCoreApplication
继承自
QGuiApplication → QCoreApplication
依赖模块 QtCore QtCore + QtGui QtCore + QtGui + QtWidgets
事件循环 ✅ 支持 ✅ 支持 ✅ 支持
定时器 / 信号槽 ✅ 支持 ✅ 支持 ✅ 支持
窗口系统 ❌ 无 ✅ 支持(窗口、图形系统 QWindow) ✅ 支持(控件事件 QWidget + 图形事件 QWindow)
输入事件 ❌ 无 ✅ 支持(键盘 / 鼠标 / 触摸 / 手势) ✅ 支持
屏幕管理 ❌ 无 ✅ 支持(多显示器 / DPI / 屏幕方向) ✅ 支持
字体 / 光标 / 剪贴板 ❌ 无 ✅ 支持 ✅ 支持
Widgets 支持 ❌ 无 ✅ 支持
资源占用 轻量 中等 较高(加载 Widgets 模块)
退出机制 需手动 quit 需手动 quit 默认最后窗口关闭时退出
典型应用场景 后台任务、守护进程、命令行工具 QML / Qt Quick / OpenGL 应用 桌面软件(办公、开发工具、图形界面程序)

【QT随笔】一文完美概括QT中的QCoreApplication、QGuiApplication与QApplication(三大 Application 基类)


五、三大 Application 基类示例代码

1. QCoreApplication (非 GUI)


#include <QCoreApplication>
#include <QTimer>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    QTimer::singleShot(1000, &app, [](){
        qDebug() << "定时器触发,退出程序";
        app.quit();
    });
    return app.exec();
}

cpp
运行
【QT随笔】一文完美概括QT中的QCoreApplication、QGuiApplication与QApplication(三大 Application 基类)12345678910111213

2. QGuiApplication (QML/Quick 应用)


#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;
    return app.exec();
}

cpp
运行
【QT随笔】一文完美概括QT中的QCoreApplication、QGuiApplication与QApplication(三大 Application 基类)123456789101112

3. QApplication (Widgets 应用)


#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QPushButton button("点击退出");
    QObject::connect(&button, &QPushButton::clicked, &app, &QCoreApplication::quit);
    button.show();
    return app.exec();
}

cpp
运行
【QT随笔】一文完美概括QT中的QCoreApplication、QGuiApplication与QApplication(三大 Application 基类)1234567891011

总结

QCoreApplication → 基础逻辑和事件循环QGuiApplication → 加入 图形系统支持(窗口 + 输入 + 屏幕 + 字体 + DPI)QApplication → 在 QGuiApplication 基础上再加 Widgets,面向传统桌面 GUI 应用

【QT随笔】一文完美概括QT中的QCoreApplication、QGuiApplication与QApplication(三大 Application 基类)

👉 如果你开发 QML/Qt Quick 应用,必须用
QGuiApplication

👉 如果你要写传统桌面 GUI(带按钮、菜单),就用
QApplication

👉 记忆口诀: Core → Gui → Widgets(逐级增强功能,按需选择即可)

© 版权声明

相关文章

暂无评论

none
暂无评论...