一、Qt背景与应用场景

Qt定位

互联网核心岗位职责:

1)开发

     a.后端开发

     b.前端开发 -> 网页前端;桌面应用;移动应用

     c.算法工程师

     d.游戏开发

2)测试

3)运维(管理机制)

4)产品经理(非技术岗,提出需求)

        Qt属于客户端(与用户打交道的成为客户端)开发,桌面应用开发;Qt无法用于开发网页前端,也不能开发移动应用 -> 目前虽然支持移动应用开发,但不温不火。

客户端开发重要任务:编写和用户交互的界面。

和用户交互的界面,两种典型风格:

1.命令行界面/终端界面 -> TUI

2.图形化界面 -> GUI 适用于普通用户

Qt是用来编写桌面GUI程序的一套框架!

Windows下其他方案开发GUI

1.Windows API ,windows系统提供的原生API,开发起来非常原始,也很繁琐

2.MFC 上世界90年代影响力非常深渊的;除此还有VC 6.0

3.Qt(1991年左右)诞生,(MFC已然断更)Qt仍在推陈出新,至今仍然具有生命力

GTK,WxWidegt ...

4. Windows Forms给C#(.net)量身定做了一套开发GUI技术体系

5.WPF

6.UWP

7.Electron :本质是把基于HTML这样的网页,打包成一个windows上运行的客户端程序

最初是用来开发"atom"文本编辑器的--Github,后Github被微软收购

比较大的缺点:开发出来的程序,运行效率,低于原生开发的技术体系

Qt介绍

Qt是一个跨平台的C++图形用户界面应用程序框架

框架 vs 库

相同点:都是大佬写好的代码,程序员去使用。

不同点:库是被程序员调用的(程序员是主体);框架和程序员关系则是框架占主体,程序员负责填充晚上框架中留出的细节。

        C++相比于Java,生态没有那么统一,编码风格各异。

Qt应用场景和优点

Qt支持的系统:

1)windows(各个版本)

2)Linux(各种发行版),尤其是Linux中的KDE桌面基于Qt构建的

  • Linux主要是给服务器使用,服务器不需要图形化界面
  • 但也有少数用户,使用Linux作为桌面;(GNOME,基于GTK构建;KDE,基于Qt构建)

3)Mac系统

4)嵌入式系统

        日常家用电器,这些设备内部也有计算机,但配置不高 -> 有些嵌入式系统,也是需要运行图形化界面的程序的,Qt起作用了,尤其是一些工业设备上(设备如果配置高,跑安卓也可以)

二、Qt安装

1.C++编译器

2.Qt SDK(SDK->软件开发工具包)

3.Qt集成开发环境(IDE)

1)Qt官方提供的Qt Creator -> 最容易上手,不需要额外的配置

2)visual studio -> 功能更强,但需要额外的配置更多。

3)Eclipse -> IDE平台,可搭配不同的插件使用

配置环境变量:将 前导路径\Qt\Qt版本\mingw_64\bin路径添加到系统Path环境变量

环境变量“进程间通信”理解:双方事先有约定

三、Qt SDK

1)Assitant:Qt自带的离线版本的官方文档

2)Designer:Qt设计师,图形化的设计界面工具。通过拖拽空间的方式来快速生成界面。搭配Qt Creator来使用

3)Linguist:Qt语言家,对国际化支持,一键式切换语言

4)Creator:Qt集成开发工具,主要使用

创建Qt项目

传统开发GUI:QT Widget

        构建系统:通过Qt写的程序,涉及到一系列的“元编程”技术,通过代码来生成代码。

        Qt框架在编译的时候,自动先调用一系列的生成工具,基于自己写的代码,生成一系列的其他C++代码,最终编译的代码,也是最后生成的代码。

        使用Qt Creator创建项目,会自动地生成一些代码出来。生成的代码包括一个类,此处选择的就是这个自动生成类的父类是谁。

1)QMainWindows,完整的应用程序窗口(可以包含菜单栏,工具栏,状态栏)

2)QWidget表示一个控件(窗口上的一个具体元素,输入框,按钮,下拉框,单选按钮,复选按钮)

3)QDialog表示一个对话框

注:Qt中内置的类都是以Q前缀开头的

form file非常关键!

Qt中创建图形化界面的程序,两种方式:
1)直接通过C++代码方式创建界面

2)通过form file,以图形化的方式来生成界面(此时可以使用Qt Designer或者直接使用Qt Creator来编辑这个ui文件,以图形化界面方式)

四、Qt代码结构

main.cpp

QApplication:编写一个Qt的图形化界面程序,一定需要有QApplication对象!

Widget:创建项目的时候,填写了生成的类名

创建一个控件对象,并显示出来,.show()方法让控件显示出来,.hide()方法让控件隐藏。

(Widget的父类是QWidget,这些方法都是QWidget提供的)

widget.h

        Q_OBJECT是一个Qt内置的宏,宏本质是文本替换 -> Q_OBJECT展开之后,就会生成一大堆的代码(Qt中有一个非常核心的机制,“信号”和“槽”,如果某个类想使用“信号和槽”就需要引入Q_OBJECT这个宏)

        Qwidget *parent = nullptr -> Qt中引入了“对象树”机制 -> 创建的Qt的对象,就可以把这个对象给挂到对象树上,往树上挂的时候就需要指定“父节点” -> 对象树是一颗普通N叉树。

widget.ui

html vs xml

不同点:xml有哪些标签,表示什么含义,由程序员自定义!(ui文件本质上就是一个xml)类似自定义应用层协议,是一种约定。

Qt中使用xml文件就是去描述程序的界面是什么样的。

进一步的qmake会调用相关的工具,依据xml文件生成一些C++代码,从而把完整的界面构造出来。

.pro

Qt项目的工程文件,也是qmake工具构建时的重要依据。

.pro类似于Makefile文件 -> qmake搭配.pro起到的作用和Makefile是类似的。

临时文件

        编译Qt程序,还是会用到Makefile,只不过这个makefile不需要手动写,而是qmake自动生成。

        ui_widget.h -> widget.ui xml生成的.h文件。

        ui_widget.h内部包含Qt自动生成的代码,这个setupUi方法中包含具体细节。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐