首页 > 其他分享 >初始 Qt

初始 Qt

时间:2023-11-08 15:57:25浏览次数:36  
标签:Qt Creator 项目 C++ 开发 初始 许可

认识 Qt

参考:

【1】《Qt6C++ 开发指南》

Qt 简介

很多刚接触 Qt 的开发者会认为 Qt 是一种编程语言,或者将 Qt 的集成开发环境(integrated development environment,IDE)Qt Creator 当作 Qt,这些理解是错误的。Qt 实质上是用 C++编写的大型类库,它为跨平台应用开发提供了一个完整的框架。Qt 框架包含大量的类,支持 GUI、数据库、网络、多媒体等各种应用的编程。本节概要介绍 Qt 的功能和特点,包括其跨平台开发能力、许可类型、支持的开发语言,以及 Qt 6 的新特性。


Qt 的跨平台开发能力

Qt 的一个最重要的特点是具备跨平台开发能力。我们可以使用 Qt 为计算机、移动设备、嵌入式设备、微控制单元(microcontroller unit,MCU,又称单片机)等目标设备开发程序。Qt 能用于如下一些设备和平台的应用开发。

  • 桌面应用开发,支持的桌面操作系统包括Windows、Linux 和 macOS。
  • 移动端应用开发,支持的移动操作系统包括 Android、iOS 和 Windows。
  • 嵌入式设备的应用开发
  • MCU 的应用开发,支持的嵌入式操作系统包括 QNX、嵌入式 Linux 和 VxWorks 等。这些嵌入式设备一般具有能力较强的处理器和丰富的存储器资源,例如轿车的全液晶仪表盘。
  • 支持嵌入式实时操作系统 FreeRTOS 或无操作系统。MCU 的处理器能力较弱,存储器资源有限,各种MCU系统的硬件资源差异大,目前Qt只支持NXP、Renesas、ST、Infineon 等公司的部分型号单片机开发板,实际产品的开发需要深度定制。

对于嵌入设备开发时,需要使用交叉编译开发方式,因为嵌入式设备的资源有限。对于嵌入式开发将源程序使用指定目标平台的编译器编译代码,在将二进制文件下载到目标设备上运行。

在交叉编译开发方式中,计算机称为主机,主机包括 Windows、桌面 Linux、macOS 等不同的主机平台,Qt 提供了安装在这 3 种主机平台上的对应版本。不同的平台必须对应相应的平台才能运行该平台开发的Qt程序,如下表1-1。

image


Qt 的许可类型和安装包

Qt 的许可类型分为商业许可和开源许可,开源许可又分为 GPLv2/GPLv3 和 LGPLv3。各种许可协议的主要特点如下。

1、商业许可。商业许可需要付费,Qt 公司目前采用的是按年付费的方式。商业许可允许开发者不公开项目的源代码。商业许可的 Qt 安装包里有更多的模块,某些模块只有在商业许可的版本中才有。

2、开源许可。

  • GPLv2/GPLv3 许可。若用户编写的程序使用了 GPL 许可的 Qt 代码,则用户程序也必须使用 GPL 许可,也就是用户代码必须开源,但是允许商业化销售。GPLv3 还要求用户公开相关硬件信息。
  • LGPLv3 许可。若用户对使用 LGPL 许可的 Qt 代码进行修改后予以发布,则用户发布的代码必须遵循 LGPL 许可,也就是用户代码必须开源,但是允许商业化销售。若用户编写的程序只是以库的形式链接或调用了使用 LGPL 许可的 Qt 代码,则用户代码可以闭源,也可以商业化销售。

在开源许可协议中,LGPL 相对于 GPL 更宽松一些。若用户程序只是链接或调用 LGPL 许可协议的 Qt 代码,那么用户代码可以闭源;而用户程序只要用到了使用 GPL 许可协议的 Qt 代码,用户代码就必须开源。

Qt 的安装包、工具软件、开发框架中的不同模块都有各自的许可类型。若用户开发的代码可以开源,就可以放心使用 Qt 中各种开源许可的工具软件和模块;若用户不想公开自己的源代码,就不能使用 GPL 许可的 Qt 模块,使用 LGPL 许可的模块时要注意只能以库的形式链接或调用。根据开发目标的不同,Qt 提供了 3 种安装包。安装包具有针对不同主机平台的版本,而且采用了不同的许可协议。

  • Qt for Application Development:用于为计算机和移动设备开发应用的开发套件安装包,有商业和开源两种许可协议,具有 Windows、Linux、macOS 主机平台版本。
  • Qt for Device Creation:用于为嵌入式设备开发应用的开发套件安装包,只有商业许可协议,具有 Windows 和 Linux 主机平台版本。
  • Qt for MCUs:用于为 MCU 开发 GUI 程序的开发套件安装包,只有商业许可协议,具有 Windows 和 Linux主机平台版本。

Qt 支持的开发语言

1、C++ 和 QML

Qt 类库本身是用 C++语言编写的,所以 Qt 支持的基本开发语言是 C++。Qt 还对标准 C++语言进行了扩展,引入了信号与槽、属性等机制,为跨平台和 GUI 程序的对象间通信提供了极大的方便。

Qt 还提供了一种自创的编程语言 QML,它是类似于 JavaScript 的声明性语言。Qt 提供了一个用QML编写的库Qt Quick,它类似于Qt C++类库,区别是Qt Quick中的各种控件被称为QML类型(type)。QML 用于描述程序的用户界面,将用户界面描述为对象树,每个对象具有自己的各种属性。

QML 适合为支持触摸屏操作的设备创建用户界面,这些设备如手机、嵌入式设备和 MCU。用 QML 创建的用户界面具有现代感很强的界面显示和操作效果。还可以混合使用 QML 和 C++编程,也就是用 QML 创建用户界面,用 C++处理后台业务逻辑。

Qt 的 3 种安装包都支持 QML,Qt for MCUs 目前不支持 C++,只支持 QML。因为 MCU 的资源有限,所以 Qt for MCUs 支持的是一个轻量化的 QML 控件库 Qt Quick Ultralite。使用 QML 为MCU 创建界面的代码会被转换为 C++代码,MCU 底层开发使用嵌入式 C/C++。

2、Python

Qt C++类库可以被转换为 Python 绑定,我们可以用 Python 语言编程调用 Qt 类库进行 GUI程序开发。Qt 类库的 Python 绑定版本比较多,比较常用的是 PyQt 和 PySide。

PyQt 是 Riverbank Computing 公司开发的 Qt 类库的 Python 绑定,它出现得比较早,更新比较及时,是目前应用比较广泛的 Qt 类库的 Python 绑定。PyQt5 是与 Qt 5 对应的版本,PyQt6 是与 Qt 6 对应的版本。PyQt5 和PyQt6 都采用商业许可和 GPLv3 开源许可。

PySide 采用商业许可和 LGPLv3 开源许可,相对于 PyQt 采用的 GPLv3 开源许可,LGPLv3开源许可对商业开发者更友好一些。


Qt 的安装

1、软件的下载:

从Qt 5.15 开始,Qt 开源版本只提供在线安装软件,没有离线安装软件。

链接: [https://download.qt.io/archive/online_installers/4.2/ ](Index of /archive/online_installers/4.2 (qt.io))

下载: qt-unified-windows-x86-4.2.0-online.exe 为例。

2、安装软件

在安装时可能会出现一个问题,就是下载不成功;因此需要选择国内镜像:

./qt-unified-windows-x86-4.2.0-online.exe --mirror https://mirrors.cloud.tencent.com/qt/

image

其他具体操作,百度。

3、配置环境变量

image


编写一个 Hello World 程序

Qt Creator 简介

Qt Creator 本身就是用 Qt 开发的,Windows 平台上的 Qt Creator 6.0.2 是基于 Qt 6.2.2,采用MSVC 2019 64位编译器编译的。点击Qt Creator菜单项Help→About Qt Creator可以查看Qt Creator使用的 Qt 开发套件信息。

Qt Creator 软件启动后的 Welcome 界面如图 1-8 所示,Qt Creator 的界面很简洁,上方是菜单栏,左侧是主工具栏,中间部分是工作区。主工具栏提供了项目文件编辑(Edit)、窗口界面设计(Design)、程序调试(Debug)、项目设置(Project)等功能按钮。根据左侧点击的工具栏的不同按钮,以及打开的不同文件,工作区会显示相应的工作界面。

下图是在左侧主工具栏点击 Welcome 按钮后显示的界面。工作区的左侧有 Projects、Examples、Tutorials、Get Started Now 几个按钮,点击某个按钮后会在工作区显示相应的内容。

  • 点击 Projects 按钮,工作区会显示最近打开过的项目,以便快速选择项目。
  • 点击 Examples 按钮,工作区会显示 Qt 自带的大量示例项目,点击某个项目就可以在 Qt Creator 中打开该项目源程序。
  • 点击 Tutorials 按钮,工作区会显示各种教程。
  • 点击 Get Started Now 按钮,工作区会切换到帮助界面,相当于在菜单栏上点击 Help 菜单项。

image

下面使关于Qt Creator 的配置信息:

  • Kits 设置。Kits 就是安装的 Qt 开发套件,我们在安装过程中选择了 3 个开发套件,所以Qt Creator 能自动检测到安装的套件,并设置好关联的编译器和调试器。
  • Environment 设置。在 Interface 界面可以设置语言和主题,本书全部以英文界面的 Qt Creator进行讲解,所以语言选择为 English,还将主题设置为 Flat Light。更改语言和主题后需要重新启动 Qt Creator 设置才会生效。
  • Text Editor 设置。在对应界面可以设置文本编辑器的字体,设置各种类型文字的颜色,如关键字、数字、字符串、注释的颜色,也可以选择不同的配色主题。
  • C++设置。在对应界面可以设置 C++代码样式,可以设置代码缩进方式和与按 Tab 键等效的空格数。

image


新建一个 GUI 项目

点击 Qt Creator 的菜单项 File→New File or Project,会出现图 1-10 所示的对话框。使用这个对话框可以创建多种类型的项目或文件。在对话框左侧的列表框中点击 Application(Qt),中间的列表框中会列出可以创建的项目类型。

  • Qt Widgets Application。基于界面组件的应用,也就是具有窗口的 GUI 程序,项目编程使用 C++语言。本书将此类项目称为 GUI 项目或应用项目,本书示例基本上都是此类项目。
  • Qt Console Application。控制台应用,没有 GUI。一般是在学习 C/C++语言基础语法,只需简单的输入输出操作时才创建此类项目。
  • Qt Quick Application。基于 Qt Quick 的应用,需要使用 QML 编程。

image

在图所示的对话框中选择 Qt Widgets Application 后,点击 Choose 按钮,会出现下图所示的新建项目向导。

image

在上图中设置好项目名称和存储路径后,点击 Next 按钮,会出现下图所示的选择构建系统的界面。可以选择 qmake 或 CMake,默认是 qmake。

image

这里选择 qmake 后点击 Next 按钮进入下一步,会出现下图所示的界面,用于设置窗口类名称,选择窗口基类。GUI 项目需要创建一个窗口,在 Base class 下拉列表框中选择一个窗口基类,有 3 种窗口基类可供选择。

  • QMainWindow 是主窗口类,主窗口类具有菜单栏、工具栏和状态栏。
  • QWidget 是所有界面组件类的基类,QWidget 可以作为独立的窗口,就是一个空白的窗口。
  • QDialog 是对话框类,窗口具有对话框的显示效果,例如没有最大化按钮。

image

下一步之后,选择Kit 开发套件,开发套件隐含了所用的编译器。

image

Next 按钮后进入总结界面,显示项目存储路径和将要创建的文件清单,还可以为项目设置版本控制工具。我们不考虑版本控制,因此到这里就完成了项目的创建。


项目的文件组成和管理

使用向导创建项目 samp1_1 之后,在 Qt Creator 的左侧工具栏上点击 Edit 按钮,会显示图 1-15所示的界面。界面左侧有上下两个子窗口,上方的目录树显示了项目内文件的组织结构,目录树的顶层节点是项目名称节点 samp1_1。Qt Creator 可以打开多个项目,但是其中只有一个活动项目(active project),活动项目的项目名称节点的文字用粗体。在项目名称节点下面是项目内文件分组和各种源文件。

  • samp1_1.pro 文件。这是使用 qmake 构建系统时的项目配置文件,包括关于项目的各种设置内容。
  • Headers 分组。该节点下是项目内的 C++头文件(.h 文件),该项目有一个头文件 widget.h,它是窗口类的头文件。
  • Sources 分组。该节点下是项目内的 C++源程序文件(.cpp 文件),该项目有两个 C++源程序文件:widget.cpp 是窗口类的程序文件,与 widget.h 文件对应;main.cpp 是包含 main()函数的文件。
  • Forms 分组。该节点下是项目内的窗体文件(.ui 文件),也称为用户界面(user interface,UI)文件。该项目有一个 UI 文件 widget.ui

image

image

在Qt Creator 中内置的 Qt Designer,用于对 UI 文件进行界面可视化设计。窗口左侧是组件面板,具有多个分组的用于设计界面的组件。窗口中间是待设计的窗体,也就是文件 widget.ui 的显示效果。窗口右侧上方是对象检查器(Object Inspector),显示了窗体上所有组件的层次结构。窗口右侧下方是属性编辑器(Property Editor),在设计窗体上点击一个组件后,在属性编辑器里就可以显示和修改其属性。

从组件面板的 Display Widgets 分组里,将一个 Label(标签)拖放到设计的窗体上面。双击刚刚放置的标签,可以编辑其显示文字,将文字内容修改为“Hello World”。在属性编辑器里修改标签的 font 属性,将 Point Size 设置为 15,勾选 Bold 复选框。


项目的构建、调试与运行

点击主窗口左侧工具栏上的 Projects 按钮,会切换到下图所示的 Projects 设置界面。

image

界面左侧一栏的 Build & Run 下面显示了所有开发套件,点击某个套件其就会变为粗体字显示,表示这是当前使用的开发套件。开发套件有快捷菜单,可以为项目启用或禁用某个开发套件。

每个开发套件又有 Build 和 Run 两个设置界面。在 Build 设置界面上,有一个 Shadow build复选框(见上图 )。如果勾选此复选框,构建项目后将在项目的同级目录下创建一个输出文件夹,文件夹名称包含套件和构建模式信息。如果不勾选此复选框,构建后 Qt Creator 将在项目的目录下创建文件夹 debug 和 release 用于存放输出文件。对于一般的示例项目不需要勾选 Shadow build复选框,只有在需要输出多种构建版本的输出文件时才勾选此复选框。对于项目的 Build 和 Run设置界面的其他选项都采用默认设置即可。

设计好 UI 文件 widget.ui 的可视化界面,并设置好开发套件之后,就可以对项目进行构建、调试或运行。主窗口左侧工具栏下方有 4 个工具按钮,其功能如表 1-2 所示。

image


在运行程序时会出现的问题

1、无法找到入口

image

是因为Qt 打包发布exe 缺少或者加载错误的 Qt libstdc++-6.dll 报错。

解决方案:

1、手动赋值一个libstdc++-6.dll 到samp1_1.exe 目录下。

2、通过windeployqt.exe 创建应用程序发布包,会将一系列库文件等加载到指定目录。如下图在Project 中 Build Setting 中的 Build Steps 中添加一步,可以解决上面问题。

image

标签:Qt,Creator,项目,C++,开发,初始,许可
From: https://www.cnblogs.com/jm-luoxuanpao/p/17817559.html

相关文章

  • 系统初始化脚本
    #!/bin/bash#1.显示系统版本check_system_version(){awk'{print$(NF-1)}'/etc/redhat-release}#2.更新yum源check_yum(){tt=$(awk'{print$(NF-1)}'/etc/redhat-release)if[${tt%%.*}-eq"6"];then    mkdir-p/etc/yum.repos.d/ba......
  • QT实现将截屏保存为图片实践
    QT代实现将截屏保存为图片实践使用QGuiApplication::primaryScreen()可以取得当前屏幕,取得将QScreen->grabWindow(0)存入QPixmap即可。这里可以看到QT的封装非常方便我们取得屏幕截图。 开始截屏按扭代码voidTestWidget::on_pushButton_clicked(){this->hide();//隐藏当前......
  • qt 配置文件 settings
     Qt如何读取和写入配置文件的数据呢?_qt配置文件读写-CSDN博客 这篇写的很好,照着做成功了,能读写配置文件配置文件的路径在构造函数中设置。Qt使用QSetting对ini配置文件进行读取和写入_.ini文件读写qsetting-CSDN博客......
  • PyQt5-如何设置应用和窗口的图标?控件的提示信息如何设置?
    (PyQt5-如何设置应用和窗口的图标?控件的提示信息如何设置?)1如何设置应用和窗口的图标?1.1导入需要的包QApplication类是PyQt5的应用程序类;QMainWindow类是一个主窗口类;QIcon类用于创建和管理图标;ctypes是python的一个函数库,提供和C语言兼容的数据类型,可以直接调用动态链接......
  • QT发起http/https请求
    示例1、在.pro工程描述文件中添加网络模块QT+=network2、示例代码#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include"ui_mainwindow.h"#include<QDebug>#include<QWidget>#include<QObject>#include<QHttpMultiPar......
  • Qt事件循环及QEventLoop的使用
    目录一、介绍二、QCoreApplication主事件循环三、事件循环的开启例一例二四、父子事件传递五、processEvents六、QEventLoop类七、事件循环的嵌套及QEventLoop模拟同步调用1、同步获取数据2、主线程等待3、对话框弹出一、介绍Qt作为一个跨平台的UI框架,其事件循环实现原理......
  • QT代码实现将图片镜像翻转效果
    QT代码实现将图片镜像翻转效果将图片原图和镜像图合并输出,实现图片镜像功能快速显示效果在UI拖入一个QPushButton,一个QLabel用于缩放显示效果voidWidget::on_pushButton_clicked(){QStringpath=QDir::currentPath();//ui->m_fileEdit->setText(path);//打......
  • pyqt5-QScrollBar
    1、介绍这是一个进度条组件,两侧点击可以加减。 setMinimum(self,a0:int)设置最小值,可以是负值setMaximum(self,a0:int)设置最大值,可以是超过100设置浮点数时,保留其整数部分value(self)->int返回进度条的数值,int类型。默认时最小为0,最大为99。两侧点击,加减的......
  • qt 登录
    Qt设计精美的登录注册界面(包含SQLite数据库应用)_c++_桃豆豆-腾讯云开发者社区(csdn.net)......
  • 关于嵌入式QT QML 竖屏屏幕显示为横屏
    硬件平台:全志的A40I-H(从淘宝一家广州卖家买的开发板)软件平台:Linux内核版本3.10.65QT版本:5.9.0当时遇到的问题,在PC上运行一个qml的demo,是正常的横屏显示的。但是交叉编译过后,烧录到开发板子上面,发现是旋转了90度显示大致如下图所示: 当时非常的头大,如果按照文档上面,使用QT......