Qt 6之四:基础概念讲解

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

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文件来定义构建过程。

特点:

  • 支持复杂的项目结构和大型项目。
  • 强大的模块和脚本支持。
  • 跨平台生成原生构建文件,如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的项目,资源可以通过在CMakeLists.txt文件中设置相应的命令来包含。CMake不像qmake那样有一个内置的资源系统,但你可以通过将资源文件复制到构建目录或指定的输出目录来管理资源。

例如,你可以使用configure_file或file(COPY ...)命令来复制资源:

configure_file(path/to/logo.png path/to/build/directory/logo.png COPYONLY)

# 或者

file(COPY ${CMAKE_SOURCE_DIR}/images/logo.png DESTINATION ${CMAKE_BINARY_DIR}/images)

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中常用的交互和通信方式的概述。根据应用程序的需求和场景,你可以选择适合的方式来实现组件之间的交互和数据传输。

下一讲,将介绍GUI 应用程序示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/600580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python小细节之Gui图形化界面库tkinter学习

敲打计数脚本学TKinter 引言开整选择决定难易了解她使用她运行效果 结尾 引言 我的爬取表情包的爬虫文件写好了 运行 输入关键词就可以得到对应的 表情包 我也通过pyinstall 打包了 但是很丑 就只有一个黑box 我是新手 所以我知道 这对于普通人来说 不友好 且在使用的过程中 …

C++ 具名要求-布局

此页面中列出的具名要求&#xff0c;是 C 标准的规范性文本中使用的具名要求&#xff0c;用于定义标准库的期待。 某些具名要求在 C20 中正在以概念语言特性进行形式化。在那之前&#xff0c;确保以满足这些要求的模板实参实例化标准库模板是程序员的重担。若不这么做&#xf…

Pendulum详解4——Pendulum在数据挖掘中的威力 - 时间的宝藏

写在开头 在这个数字化时代,时间数据无处不在,而它往往蕴含着丰富的信息。然而,在数据挖掘中,我们经常需要处理不同时间维度的数据,从而更好地理解和预测各种现象。Pendulum库的引入为我们提供了一种简洁而强大的工具,可以更好地处理和分析时间数据。 1. 集聚分析 地理…

Apache Doris 2.0.2 安装步骤 Centos8

Linux 操作系统版本需求 Linux 系统版本当前系统版本CentOS7.1 及以上CentOS8Ubuntu16.04 及以上- 软件需求 软件版本当前版本Java1.81.8.0_391GCC4.8.2 及以上gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) 1、查看操作系统版本 方法 1&#xff1a;使用命令行 打开终端或…

MongoDB笔记

文章目录 安装查看数据库命令手册 学习地址&#xff1a;https://www.bilibili.com/video/BV16u4y1y7Fm 安装 下载地址 https://www.mongodb.com/try/download/community-kubernetes-operator查看数据库 查看当前数据库 show dbs show databases切换数据库 use 数据库名称cls…

建站指南,如何将拥有的域名自定义链接到wordpress

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 在Dynadot上&#xff0c;我们可已经账户中管理的…

主题-----读微信公众号

1.SOA 面向服务的架构&#xff08;Service-Oriented Architecture&#xff0c;SOA&#xff09;还没有一个公认的定义。许多组织从不同的角度和不同的侧面对 SOA 进行了描述&#xff0c;较为典型的有以下三个&#xff1a; &#xff08;1&#xff09;W3C 的定义&#xff1a;SOA 是…

小H靶场笔记:DC-5

DC-5 January 5, 2024 10:44 AM Tags&#xff1a;screen提权 Owner&#xff1a;只惠摸鱼 信息收集 探测靶机ip&#xff0c;大概率为192.168.199.135&#xff0c;且开放端口为80和111 扫描端口80&#xff0c;111相关服务、版本、操作系统、漏洞信息 sudo nmap -sS -O -sV 19…

【数字图像处理】万字长文的数字图像处理全貌

数字图像处理 数字图像处理也是一个广泛而深入的领域&#xff0c;涉及多个章节和主题。 图像获取与表示&#xff1a; 学习如何获取和表示数字图像&#xff0c;包括不同的图像格式和编码方法。 图像增强&#xff1a; 改善图像质量&#xff0c;使其更适合特定应用&#xff0c;例…

Danil Pristupov Fork(强大而易用的Git客户端) for Mac/Windows

在当今软件开发领域&#xff0c;团队协作和版本控制是非常重要的方面。在这个过程中&#xff0c;Git成为了最受欢迎的版本控制工具之一。然而&#xff0c;对于Git的使用&#xff0c;一个好的客户端是至关重要的。 今天&#xff0c;我们要为大家介绍一款强大而易用的Git客户端—…

.NET 8.0 本机 AOT

在软件开发领域&#xff0c;优化性能和简化效率仍然至关重要。.NET 平台二十年来不断创新&#xff0c;为开发人员提供了构建弹性且高效的软件解决方案的基础架构。 与本机 AOT&#xff08;提前&#xff09;编译相结合&#xff0c;取得了显着的进步。本文深入研究.NET Native AO…

计算机进入BIOS - Win/Linux

计算机进入BIOS - Win/Linux 快捷键方法&#xff08;通用&#xff09;Win系统方法Linux系统方法 快捷键方法&#xff08;通用&#xff09; 此方法为通用方法&#xff0c;适用于任何型号的计算机&#xff0c;包括台式机和笔记本&#xff0c;也包括Win系统和Linux系统。 进入BI…

OpenCV-Python(28):基于GrabCut 算法交互式前景提取

目标 GrabCut 算法原理&#xff0c;使用GrabCut 算法提取图像的前景 创建一个交互是程序完成前景提取 介绍 GrabCut算法是一种基于图像分割的算法&#xff0c;用于将图像中的前景物体从背景中准确地分离出来。它是由Carsten Rother等人于2004年提出的。 GrabCut算法的基本思想…

C#,入门教程(10)——常量、变量与命名规则的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(09)——运算符的基础知识https://blog.csdn.net/beijinghorn/article/details/123908269 C#用于保存计算数据的元素&#xff0c;称为“变量”。 其中一般不改变初值的变量&#xff0c;称为常变量&#xff0c;简称“常量”。 无论…

QT工具栏开始,退出

QT工具栏开始&#xff0c;退出 //初始化场景QMenuBar *bar menuBar();setMenuBar(bar);QMenu *startbar bar->addMenu("开始");QAction * quitAction startbar->addAction("退出");connect(quitAction , &QAction::triggered,[](){this->c…

Pycharm打包程序为exe文件

Pycharm打包程序为exe文件 【一】导入模块pyinstaller 【1】图片说明 【2】文字说明 根据图片顺序执行 首先点击file进入settings界面&#xff0c;在setting界面找到Project下面的Python Interpretor&#xff0c;点击号进行模块的添加在搜索框中输入pyinstaller&#xff0c;…

三、Kubernetes(K8s)入门(一)

视频教程连接k8s 入门到微服务项目实战.xmind链接&#xff1a;https://pan.baidu.com/s/1q04euH7baE8eXNyG3kPPbA 提取码&#xff1a;jej4比较好的笔记 kubectl命令的语法如下&#xff1a; kubectl [command] [type] [name] [flags]comand&#xff1a;指定要对资源执行的操作…

了解单元测试

一&#xff0c;测试分类 1.1 E2E测试&#xff08;end to end端到端测试&#xff09; 属于黑盒测试。 主要通过测试框架&#xff0c;站在用户测试人员的角度&#xff0c;模拟用户的操作进行页面功能的验证&#xff0c;不管内部实现机制&#xff0c;完全模拟浏览器的行为。&am…

任我行CRM系统SmsDataList接口SQL注入漏洞复现 [附POC]

文章目录 任我行CRM系统SmsDataList接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议任我行CRM系统SmsDataList接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关…

C++《异常》

前言&#xff1a;C有一套独立的异常处理机制,今天就来做详细的介绍try,catch这两个词等 在C语言中处理错误的方式和缺陷有&#xff1a; 返回错误码。 缺陷&#xff1a; 1.错误码不好设置&#xff0c;比如&#xff1a;除0操作&#xff0c;就不好返回错误码。如果返回一个数字&…