Qt 6之四:基础概念讲解

2024-01-09 21:41:16

Qt 6之四:基础概念讲解

Qt是一种跨平台的C++应用程序开发框架,它提供了一套丰富的工具和库,可以帮助开发者快速构建跨平台的应用程序,用于开发图形用户界面(GUI)和非GUI应用程序。

Qt 6之一:简介、安装与简单使用 https://blog.csdn.net/cnds123/article/details/130730203

Qt 6之二:项目的结构、资源文件的使用https://blog.csdn.net/cnds123/article/details/130741807

Qt 6之三: 项目的发布 https://blog.csdn.net/cnds123/article/details/130827966

Qt Creator是一个跨平台的集成开发环境(IDE),主要用于Qt应用程序开发。

Qt Creator的构建系统(Build system)概述

Qt Creator支持多种构建系统(Build system),每种构建系统都有其特点和用法。

不同构建系统的配置文件:

Qmake的是.pro文件(应用程序名称.pro)

CMake的是CMakeLists.txt文件

Qbs的是. qbs文件(应用程序名称. qbs)

以下是构建系统的概述:

QMake

QMake是Qt的传统构建系统,它使用简单的.pro(项目)和.pri(包含)文件来定义项目的构建过程。

特点:

  • 紧密集成于Qt。
  • 简单易学,适合小到中等规模的项目。
  • 自动生成Makefile,跨平台支持良好。

用法:

  1. 创建.pro文件,定义项目中的文件、库依赖和其他构建参数。
  2. 在Qt Creator中打开.pro文件,IDE将自动处理构建配置。
  3. 使用Qt Creator的构建、运行和调试功能来开发应用程序。

一个简单的 .pro 文件可能如下所示:

SOURCES += main.cpp MyWidget.cpp

HEADERS += MyWidget.h

QT += widgets

在 Qt Creator 中,打开 .pro 文件会自动识别为一个 QMake 项目。你可以在项目设置中修改构建目录、编译器选项等。需要注意的是新版本Qt Creator如 10.0.1 版本不再在新建项目时提供 QMake 选项。

CMake

CMake是一个开源的跨平台构建系统,它使用CMakeLists.txt文件来定义构建过程。目前新版 Qt Creator默认使用这个。

特点:

  • 支持复杂的项目结构和大型项目。
  • 强大的模块和脚本支持。
  • 跨平台生成原生构建文件,如Makefile、Ninja、Visual Studio项目等。

用法:

  1. 创建CMakeLists.txt文件,使用CMake命令来定义项目构建规则。
  2. 在Qt Creator中打开项目,指定CMake为构建系统。
  3. 使用Qt Creator的构建、运行和调试功能来开发应用程序。

一个简单的 CMakeLists.txt 文件可能如下所示:

cmake_minimum_required(VERSION 3.5)

project(MyApp VERSION 1.0)

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED True)

add_executable(MyApp main.cpp)

在 Qt Creator 中,打开 CMakeLists.txt 文件会自动识别为一个 CMake 项目。你可以在项目设置中修改构建目录、CMake 生成器等

Qbs

QbsQbs(Qt Build System)是一个新的构建工具,由Qt开发,用于替代QMake。

特点:

  • 基于规则的配置,更现代和灵活。
  • 跨平台,支持并行构建和增量构建。
  • 集成了Qt模块和其他工具链。

用法:

  1. 创建.qbs文件,定义项目构建逻辑和依赖关系。
  2. 在Qt Creator中选择Qbs作为构建系统。
  3. 配置构建设置,并使用Qt Creator的功能进行开发。

一个简单的 .qbs 文件可能如下所示:

Project {

? name: "MyApp"

? files: "main.cpp"

? Depends { name: "cpp" }

}

在 Qt Creator 中,打开 .qbs 文件会自动识别为一个 Qbs 项目。你可以在项目设置中修改构建目录、编译器选项等。

对于Qt Creator支持的构建系统,Qt Creator会自动生成相应的构建配置文件,如.pro文件(qmake)、CMakeLists.txt文件(CMake)等。你可以直接在Qt Creator中编辑这些文件,或者使用外部编辑器进行修改。在大多数情况下,这些文件在项目的初次创建时会被自动生成,且在大部分时间里,你可能不需要手动修改这些文件。这是因为Qt Creator提供了一种图形化的方式来管理这些设置,比如通过项目属性页面来添加或删除源文件和库,设置编译器标志等。这些更改会自动反映在构建配置文件中。注意,在对构建配置文件进行更改后,应该测试构建过程,确保一切按预期工作。

Qt创建 C++ GUI 应用程序方法概述

在 Qt 中,创建 C++ GUI 应用程序主要有两种方法:

1、使用Qt工具

☆若使用Qt Widgets,您可以使用Qt Creator中的设计师(Designer)来可视化设计和排列控件,然后使用C++代码编写逻辑。

☆若使用Qt Quick,您可以使用Qt Creator中的Qt Quick Designer来可视化设计和布局QML界面,然后使用C++代码编写逻辑。

☆若使用Qt Quick Controls 2,您可以使用Qt Creator中的Qt Quick Designer和Qt Quick Controls Gallery来可视化设计和排列控件,然后使用C++代码编写逻辑。

Qt Widgets、Qt Quick和Qt Quick Controls 2是Qt框架中不同的UI模块(组件集合),用于创建不同类型的用户界面。

Qt Widgets是Qt框架中的一组类集合,它们代表了各种GUI元素,如按钮、滑块、文本框等,适用于创建传统的桌面应用程序。

Qt Quick是基于QML的一种现代的、动态的用户界面技术。它提供了一种描述性的语言和一套UI组件,可以创建富有动感的、流畅的用户界面。并且,Qt Quick Controls 2是Qt Quick的一部分,提供了一套现代化的、风格一致的UI控件,如按钮、滑块、对话框等。

Qt Designer、Qt Quick Designer和Qt Quick Controls Gallery是Qt Creator内置的工具。

Qt Designer:它是用于创建和编辑基于Qt Widgets的用户界面的可视化工具。您可以直观地在设计界面上拖放和排列控件,设置控件的属性,以及编辑控件的信号和槽等事件响应函数。此工具非常适合开发传统的、基于窗口的桌面应用程序。

Qt Quick Designer:这是一个用于创建和编辑基于Qt Quick的用户界面的可视化工具。与Qt Designer类似,您可以在设计界面上拖放和排列控件,设置控件的属性,以及编辑控件的事件响应函数。此工具非常适合开发动态的、响应式的、基于QML的应用程序。

Qt Quick Controls Gallery:这是一个展示Qt Quick Controls 2中所有控件和样式的应用程序。您可以运行它来查看和测试各种控件和样式,以选择最适合您的应用程序的控件和样式。此工具可以帮助您更好地了解和使用Qt Quick Controls 2。

另外,Qt Design Studio是一个独立的、强大的UI设计和开发工具,它可以创建基于Qt Quick和Qt Quick Controls 2的用户界面。Qt Design Studio也支持导入Photoshop和Sketch等设计工具的原型,使得设计师和开发者可以更好地协作。

2、手动编写代码:通过完全手工编程方式创建 GUI 应用程序,您可以使用 Qt框架中 的 QWidgets 、Qt Quick和Qt Quick Controls 2 Qt模块,直接在 C++ 代码中创建和操作 GUI 组件。这种方法需要您熟悉 Qt 的类和 API,并逐个编写 GUI 组件的代码。虽然这种方法可以提供更灵活的控制和更高的定制化程度,但它需要更多的时间和精力来编写和维护代码。

不同的构建系统对资源文件(如图片、音乐)的处理方式概述

不同的构建系统(qmake、CMake或Qbs),对资源文件(如图片、音乐)的处理方式会有所不同。在某些情况下,你需要手动修改配置文件以确保这些资源被正确地包含在项目中。在Qt Creator中,使用qmake时,你可以通过图形界面来编辑.qrt文件——资源通常通过Qt资源系统(QRC)来管理,而不需要手动处理文件路径和加载资源的细节,这样可以简化资源文件的管理。对于CMake和Qbs,你可能需要手动编辑文本文件来管理资源。

以下是每个构建系统处理资源文件的基本方法:

qmake

在使用qmake时,资源通常通过Qt资源系统(QRC)来管理。你需要创建一个资源文件(通常以.qrc为扩展名),并在其中列出项目中使用的资源。然后,在.pro文件中添加对这个资源文件的引用。

例如,你的.qrc文件可能看起来像这样:

<RCC>

??? <qresource prefix="/images">

??????? <file>logo.png</file>

??????? <file>background.jpg</file>

??? </qresource>

??? <qresource prefix="/sounds">

??????? <file>click.wav</file>

??? </qresource>

</RCC>

CMake

CMake 构建项目中添加和使用资源文件的步骤概述:
1.创建资源文件 (.qrc):首先,你需要在项目的根目录下手动(如用记事本)创建一个新的 Qt 资源文件,例如 "resources.qrc"。这个文件是一个 XML 文件,用来列出所有要包含在应用程序中的资源文件。
编辑资源文件:在 "resources.qrc" 文件中,你可以添加你的资源文件。文件的格式如下:
<RCC>
? ? <qresource prefix="/">
? ? ? ? <file>images/myicon.png</file>
? ? ? ? <file>images/mybackground.png</file>
? ? ? ? <file>sounds/mysound.wav</file>
? ? ? ? <file>videos/myvideo.mp4</file>
? ? </qresource>
</RCC>
在这个例子中,资源文件被添加到了根路径 ("/") 下。你需要按照实际的文件路径来修改这些文件名。
2.添加资源文件到 CMakeLists.txt:然后,你需要在 CMakeLists.txt 文件中添加 resources.qrc 文件。在 add_executable 或 add_library 命令中,包含 resources.qrc 文件。例如:add_executable(MyApp main.cpp window.cpp resources.qrc)
你的 CMakeLists.txt 文件已经包含了PROJECT_SOURCES变量,你应该这样修改你的 CMakeLists.txt:
set(PROJECT_SOURCES
? ? main.cpp
? ? mainwindow.cpp
? ? mainwindow.h
? ? mainwindow.ui
? ? resources.qrc ?# 在这里添加你的资源文件
)
3.在代码中使用资源文件:现在,你可以在代码中使用这些资源文件。你可以使用 :/ URL 的方式来引用这些文件。例如,设置窗体的图标和背景图片,如果你的主窗体类是 MainWindow,你可以在 MainWindow 的构造函数中添加以下代码:
// 设置窗体的图标
this->setWindowIcon(QIcon(":/images/myicon.png"));

// 设置窗体的背景图片
this->setStyleSheet("QMainWindow { background-image: url(:/images/mybackground.png) }");
对于音频和视频文件,你可以使用 QMediaPlayer 类来播放它们:
c++复制代码
// 播放音频文件
QMediaPlayer* player = new QMediaPlayer;
player->setMedia(QUrl("qrc:/sounds/mysound.wav"));
player->play();

// 播放视频文件
QMediaPlayer* videoPlayer = new QMediaPlayer;
QVideoWidget* videoWidget = new QVideoWidget;
videoPlayer->setVideoOutput(videoWidget);
videoPlayer->setMedia(QUrl("qrc:/videos/myvideo.mp4"));
videoWidget->show();
videoPlayer->play();
这就是在 CMake 构建的项目中使用 Qt 资源系统的步骤。

Qbs

Qbs是一个新的构建工具,它也有自己的方法来处理资源。在.qbs文件,你可以使用Group项来指定资源文件,并将它们包含在项目中。

例如:

Group {

??? name: "Images"

??? files: ["images/logo.png", "images/background.jpg"]

??? fileTags: ["image"]

}

Group {

??? name: "Sounds"

??? files: ["sounds/click.wav"]

??? fileTags: ["sound"]

}

这里有一点需要澄清的是,一旦您创建了配置文件(.qrc、CMakeLists.txt或.qbs文件)并设置了包含资源的规则,当您添加新的资源文件到已经指定的目录或者模式下时,您可能不需要每次都手动更新配置文件。例如:

  • 在qmake中,如果您在.qrc文件中指定了一个目录,那么该目录下的所有资源文件都将包含在内,无需每次添加新文件时都修改.qrc文件。
  • 在CMake中,您可以编写脚本来自动将某个目录下的所有文件作为资源,或者使用通配符来指定资源文件,这样在添加新文件时就不需要修改CMakeLists.txt。
  • 在Qbs中,同样,您可以指定一个目录,使得该目录下的所有文件都被视为资源。

但是,如果您更改了资源文件的结构,如添加新的目录或改变文件的组织方式,您仍然需要更新这些配置文件以反映这些变化。此外,如果您希望资源在构建系统中有特殊的处理,如指定不同的资源前缀或者为不同的构建目标包含不同的资源集,您也需要手动编辑这些配置文件。

Qt交互和通信方式概述

Qt框架提供了多种方式来实现对象之间的交互和通信。以下是一些主要的机制:

  1. 信号和槽(Signals and Slots:
    • 这是Qt中最强大的通信机制,也是Qt对象之间交互的核心。
    • 信号是由对象发出的消息,表明发生了某个事件或者状态的改变。
    • 槽是可以响应信号的函数,可以是普通的成员函数、静态函数或lambda表达式。
    • 当一个信号被发射时,连接到这个信号的所有槽都会被调用。
    • 使用QObject::connect()函数来建立信号和槽之间的连接。
  2. 事件处理(Event Handling:
    • Qt中几乎所有的用户界面事件,如鼠标点击、按键按下等,都是通过事件系统来处理的。
    • 事件是QEvent类的实例,它包含了事件的所有相关信息。
    • 事件通过事件循环分发给相应的对象,并由对象的event()函数处理。
    • 你可以通过重写event()函数或更具体的事件处理函数(如mousePressEvent()、keyPressEvent()等)来自定义事件的处理。
  3. 远程对象通信(Inter-Process Communication, IPC:
    • Qt提供了多种IPC机制,包括但不限于:
    • DBus: 适用于Unix-like系统的IPC机制。
    • TCP/UDP Sockets: 网络通信的基础,Qt通过QTcpSocket、QUdpSocket等类提供了对套接字编程的支持。
    • Shared Memory: 允许不同进程访问同一块内存区域。
    • Pipes: 传统的IPC机制,Qt通过QProcess类支持管道通信。
  4. 多线程(Threading:
    • Qt支持多线程编程,可以通过继承QThread类或使用QtConcurrent模块来实现。
    • 通过线程,你可以执行长时间运行的任务而不阻塞主线程,保持用户界面的响应性。
    • Qt提供了线程安全的信号和槽连接,可以安全地在不同线程之间发送信号。
  5. 定时器(Timers:
    • 定时器可以在特定的时间间隔后发出信号,这可以用来触发周期性的事件,如定时更新UI或者检查某个条件是否满足。Qt提供了多种定时器工具,如QTimer、QElapsedTimer等,允许开发者定时执行特定任务,如更新界面、处理数据等。定时器可以用于实现动画效果、任务调度等功能。

以上是Qt中常用的交互和通信方式的概述。根据应用程序的需求和场景,你可以选择适合的方式来实现组件之间的交互和数据传输。

下一讲,Qt 6之五:创建菜单

文章来源:https://blog.csdn.net/cnds123/article/details/135401606
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。