Qt5.9_cpp_programming_guide_02_GUI_Base
GUI应用程序设计基础
Qt Creator 设计 GUI 应用程序的基本方法:
Qt创建的应用程序项目和基本组织结构
可视化设计的UI界面文件的原理和运行机制
信号与槽的使用方法
窗体可视化设计的底层原理
应用程序的窗体、组件布局、菜单、工具栏、Actions等的使用
UI文件设计与运行机制
在Qt Creator中新建一个 Widget Application 项目 ,基类中选择 QWidget 作为窗体基类,选中 Generate form 。
项目文件
samp2_1.pro 文件内容如下:
QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11DEFINES += QT_DEPRECATED_WARNINGSSOURCES += \ main.cpp \ widget.cppHEADERS += \ widget.hFORMS += \ widget.uiqnx: target.path = /tmp/$${TARGET} ...
Qt5.9_cpp_programming_guide_01_meet
认识Qt
Qt是一套应用程序开发类库,和MFC不同,Qt是跨平台的。Qt支持PC和服务器的平台,包括Windows、Linux、macOS等,还支持移动和嵌入式操作系统,比如iOS、Embedded Linux、Android、WinRT等。跨平台意味着只需要一次编程,在不同平台上无需改动或只需少许改动后再编译,就可以形成在不同平台上运行的版本。
获取与安装
许可类型
商业许可
开源许可
LGPLV3
GPLV2/GPLV3
商业许可 - 允许开发者不公开项目的源代码,其Qt版本包含更多的模块(这些模块只存在于商业许可的版本),并能够获得Qt公司的计数支持。需要向Qt购买商业许可才能获得。
开源许可 - 无需支付,但是需要遵守相关规定。
版本
Qt版本更新很快,且版本更新时会新增一些类或停止维护一些以前版本的类,Qt 5和Qt 4就有较大区别,如果不是为了维护旧版本编写的程序,一定要选用最新版本的Qt进行开发。
下载和安装
从Qt官网可以下载最新版本的Qt软件,根据开发项目不同,Qt分为桌面和移动设备应用开发、嵌入式设备开发 两大类不同的安装包。
桌面和移动设备应用开发 - ...
Gopl_02_introduction
第一章 入门
先扯一下go mod的问题。
在1.13版本后引入了管理用的modules机制。
执行:
mkdir goplgo mod init gopl
得到与工作目录gopl并列的go.mod,其内容如下:
module goplgo 1.17
hello
依旧是从hello,world开始:
// main.gopackage mainimport "fmt"func main() { fmt.Println("hello, 世界")}
执行结果为:
hello, 世界
这里用中文是因为Go语言原生支持Unicode,它可以处理全世界任何语言的文本。
$ go build main.go
这个命令生成一个名为main的可执行的二进制文件(译注:Windows系统下生成的可执行文件是main.exe,增加了.exe后缀名),之后你可以随时运行它(译注:在Windows系统下在命令行直接输入main.exe命令运行),不需任何处理。
$ ./mainhello, 世界
Go语言的代码通过包(package)组织,包类似于其 ...
Gopl_01_preface
前言
起源
由下图可以粗略看出,许多早期的编程语言对Go语言的设计产生了重要影响。
C语言
Go语言有时候被描述为“类C语言”,其从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等很多思想,还有C语言一直所在意的编译后机器码的运行效率以及和现有操作系统的无缝适配。
Pascal -> Modula-2 -> Oberon -> Oberon-2
其中一个有影响力的分支来自Niklaus Wirth所设计的Pascal语言。Modula-2语言激发了包的概念。然后Oberon语言摒弃了模块接口文件和模块实现文件之间的区别。第二代的Oberon-2语言直接影响了包的导入和声明的语法,还有Oberon语言的面向对象特性所提供的方法的声明语法等。
CSP -> Squeak -> Newsqueak -> Alef
[CSP] - 来自于贝尔实验室的Tony Hoare于1978年发表的鲜为外界所知的关于并发研究的基础文献 顺序通信进程( communicating sequential processes),缩写为 ...
data_structure_02_linear_list
线性表
重点内容:
线性表的定义和基本操作
线性表的实现:顺序存储、链式存储、线性表的应用
知识框架:
线性表的定义和基本操作
线性表的定义
线性表是具有相同数据类型的 $n \space (n \geq 0)$ 个数据元素的有限序列,其中 $n$ 为表长,为0是代表线性表为空表。若用 $L$ 命名线性表,则一般表示为:
$$
L=(a_1,a_2,…,a_i,a_{i+1},…,a_n)
$$
线性表逻辑特性为:
$a_1$ 为唯一的”第一个“数据元素,又称为表头元素 ;
$a_n$ 是唯一的”最后一个“数据元素,又称为表尾元素;
除第一个元素外,每个元素有且仅有一个直接前驱;
除最后一个元素外,每个元素有且仅有一个直接后继;
注意:
线性表是一种逻辑结构,表示元素之间一对一的相邻关系;
顺序表和链表强调的是存储结构,和线性表属于不同层面的概念;
线性表的基本操作
线性表的主要操作有:
InitList(&L) - 初始化表,构造一个空的线性表
Length(L) - 求表长,返回线性表L的长度,即其中元素的个数
LocateElem(L, e) - 按值查找 ...
data_sturcture_01_introduction
绪论
这一章粗略过一下,讲一下重点即可。
知识框架图
数据结构的一些概念
【数据】- 信息载体;
【数据项】- 构成数据元素的不可分割的最小单位;
【数据元素】- 数据的基本单位,可由若干数据项组成;
【数据对象】- 具有相同性质的数据元素的集合,是数据的子集;
【数据类型】- 一个值的集合和定义在此集合上的一组操作的总称,包括类型有:1.原子类型 2.结构类型 3.抽象数据类型
【数据结构】- 相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中,数据元素都不是孤立存在的,它们之间存在某种关系,这种数据元素相互之间的关系称为结构(structure)。数据结构包括三方面的内容:1.逻辑结构 2.存储结构 3.数据的运算。
数据的逻辑结构和存储结构是密不可分的,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构
数据结构三要素
上面提到了数据结构的三要素,分别是:
逻辑结构
存储结构
数据的运算
逻辑结构
数据元素之间的逻辑关系,从逻辑关系上描述数据。它与数据的存储无关,是独立于计算机的。
逻辑结构分为线性结构和非线性结构。
存储结构
存储结构是数 ...
pyside2_04_beautify
概要
人们对一个友好的用户界面的要求,还需要配色来点缀,才可以使得它完美无缺。几乎在每个控件的属性中,都可以设置颜色和文字大小,这也是配色的主要表现形式。Qt作为一个强大的用户界面绘制工具,它支持QSS脚本来辅助控制窗口控件属性,兼容网页格式控制的CSS脚本,即其脚本的格式和属性。
要点
具体的参数我就不必讲解了,自行查阅资料学习,相信大家看过我的例子程序就很容易理解。文件名为[名称].qss, 文件语法参考CSS。控制某个控件,简写格式如下:
[控件类型]#[控件名称],[...]{ [属性]:[值] ...}# 例:QStatusBar{ color: #DCDCDC; # 文字颜色 background: #484848; # 背景颜色}
控件名称可以缺省,缺省时表示这一类控件都设置属性。多个控件可以用逗号分隔,然后统一设置属性。 当某个控件是QWidget的继承类时,可以使用QWidget#[名称]来替代(例如Label)。具体细则请网络查找QSS, 有非常详细的介绍。
pyside2_03_layout
概要
QT提供了很多界面布局,最简单的是水平和垂直。为什么要使用布局?有些人可能遇到过, 窗口绘制好后,运行时偶然拖动窗口或控件位置大小,会破坏整个布局的美观。在Qt中使用布局功能, 能很好的控制控件的大小和位置随窗孔变化而变化。
绘制窗口
添加MainWindow,放置一个Vertical Layout,并拖入label和pushButton。组件会在layout框架中自动排列好,给label设置属性,在filter里搜索alignment(或者右键选择alignment),将水平和垂直都设置为Center。
代码转换
使用ui2py工具,将ui转换为py代码:
from PySide2.QtCore import *from PySide2.QtGui import *from PySide2.QtWidgets import *class Ui_MainWindow(object): def setupUi(self, MainWindow): if not MainWindow.objectName(): MainWindow.set ...
pyside2_02_ui
概览
使用QtDesigner结合PySide2的编程方法。主要分为三个步骤:
打开QtDesigner绘制窗口;
将UI文件转换为py文件供主程序调用;
主窗口全局初始化。
将外部工具引入到pycharm
QTDesigner:
Name: QTDesigner
Program: 【项目环境地址】\Lib\site-packages\PySide2\designer.exe
Working directory: $ProjectFileDir$
ui2py:
Name: ui2py
Program: 【项目环境地址】\Scripts\pyside2-rcc.exe
Arguments: $FileName$ -o $FileNameWithoutExtension$_rc.py
Working directory: $FileDir$
qrc2py:
Name: qrc2py
Program: 【项目环境地址】\venv\Scripts\pyside2-uic.exe
Arguments: -o $FileNameWithoutExtension$_ui.py ...
pyside2_01_helloworld
首先安装pyside2,目前pyside2还不支持python3.11,所以下载了python3.10。
pip install pyside2
直接看代码吧,也可以直接用QT Designer来做。
import sysimport randomfrom PySide2 import QtCore, QtWidgets, QtGuiclass MyWidget(QtWidgets.QWidget): def __init__(self): super().__init__() self.hello = ["Hello World", "你好,世界","Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир"] self.button = QtWidgets.QPushButton("Click me!") self.text = Qt ...