Mr. Kin's Blog

计算机知识分享/软件应用讲解

1   第一章:认识Qt

1.1   Qt简介

  • 跨平台应用程序开发框架
  • 首次发布于1995年5月
  • qt官网:www.qt.io

1.1.1   跨平台开发能力

目标设备目标平台主机平台
桌面Linux桌面Linux
计算机macOSmacOS
WindowsWindows
Android桌面Linux、 macOS、Windows
移动设备iOSmacOS
手机WindowsWindows
嵌入式Linux桌面Linux
嵌入式设备QNX桌面Linux、 Windows
VxWorks桌面Linux、 Windows
嵌入式WindowsWindows
单片机FreeRTOS或无操作系统Windows、 桌面Linux

Qt 源代码编译后生成目标平台的原生二进制代码,不像Java那样需要虚拟机,运行效率更高。

1.1.2   Qt许可的类型

Qt 的许可类型

  • 商业许可:按年付费。模块更多,开发者可以不公开自己的源码。
  • 开源许可:
    • GPLv2 / GPLv3 许可:使用了 GLP 许可的 Qt 代码允许销售,但必须开源。 GPLv3还要求公开相关硬件信息。
    • LGPLv3 许可:与 GPL 类似,但更宽松。若只是链接或调用 GPL 许可协议的 Qt 代码,可以不开源。

1.1.3   安装包

Qt 安装包:根据目标设备不同,提供了不同的安装包。

1.1.4   Qt支持的开发语言

  1. C++ 和 QML
    • Qt 对标准C++语言进行了扩展,引入了信号与槽等机制。
    • QML ( Qt Meta Language) 是一个用来描述应用程序界面的声明式脚本语言。
    • C++和QML可以混合使用。
  2. Python
    • Qt C++可以被转换Python绑定,使用 Python 调用 Qt 类库进行GUI程序开发。
    • 常用的 Qt 类库 Python 绑定有: PyQt (GPLv3 许可)和 PySide (LGPLv3 许可)

1.1.5   Qt6新特性

2020 年 12 月正式发布了 Qt6.0 ,引入的主要新特性包括:

  • 支持 C++ 17 标准。
  • Qt 核心库的改动:新的属性和绑定系统;全面支持Unicode 字符串;修改了 QList 的实现方式,将 QVector 类和 QList 类统一为 QList 类; QMetaType 和 QVariant 几乎被重写。
  • 新的图形架构: Qt5 中 3D 渲染依赖 0penGL。Qt6 中引入了新的技术 RHI (rendering hardware interface),它是一个抽象层,使得 Qt 可以使用平台本地化的 3D 图形 API(Linux:Vulkan 、Windows:Direct 3D、macOS:Metal)。
  • CMake 构建系统: Qt6 仍然支持 qmake,但建议使用 CMake。
  • 其他(多媒体、网络、 Qt Quick 3D 等模块的改进)。

1.2   Qt的安装

个人推荐:手动选择组件编译安装Qt。详见Qt源码编译

自Qt5.1.5起,Qt官方只提供在线安装包。

官方下载链接:点击跳转
清华镜像下载链接:点击跳转

本人是从源码编译安装Qt,具体的在线安装步骤不再总结。

1.3   编写一个Hello World程序

Qt Creator 简介:

  • Qt Creator 为应用程序开发人员提供了一个完整的跨平台、集成开发环境 (IDE) ,以便为桌面、嵌入式和移动设备平台(如 Android 和iOS)创建应用程序。
  • Qt Creator 提供了在整个应用程序开发生命周期所需的工具,从创建项目到将应用程序部署到目标平台。

Qt Creator新建工程的一些总结:

  1. 应用类型:
    • Widgets:widget界面
    • Console:控制台程序
    • Quick:QML实现的界面
  2. base class基础类:
    • QMainWindow:主窗口类,包括菜单栏、工具栏、状态栏
    • QWidget :可以创建一个空白的窗口,是所有界面组件的基类
    • QDialog :对话框类(比如创建工程弹出的窗口就是对话框类型,对话式窗口,比如下一步按钮继续执行)
  3. 翻译文件:i18国际化语言

1   常用的正则表达式

  • [\u4e00-\u9fa5] 匹配中文字符
  • [\u4e00-\u9fa5]+ 匹配中文字符组成的字符串

2   在编辑器中删除空行

Ctrl+H键,输入^(\s)*$\n,替换为空即可。

3   参考文献

1   语言摘记

1.1   结构体的定义和引用

1
2
3
4
5
6
7
8
9
10
11
12
13
// 定义结构体
struct book{
int number;
float value;
}adventure;
// 引用和访问结构体
adventrue.value=5;

// 结构体指针的定义和访问
struct book *book1
book1=&adventure
// 引用和访问结构体指针
book1->value=5;

2   开发记录

2.1   关于字节的一些记录

int在机器上占一个字长,而32位机器 一个字长就是4Byte,64位机器 一个字长就是8Byte。这里指的是在64位机器上的运行64位操作系统,计算的sizeof(int)。

这个说法不太正确,gcc编译64bit的程序,sizeof(int)输出为4,即4Byte,32bit。

3   参考文献

1   开发记录

类名含有空格(浏览器F12检查元素)时,一般是包含多个类名,空格字符在类型中无效,实际上呈现出来的是分隔符,不是空格。CSS类名选择器一般选择第一个即可。

1.1   伪类的content不能被选中

伪类不是真正的DOM,无DOM相关的属性和方法。

::before::after伪类的说明:

  • 默认display: inline
  • 必须设置content属性,否则一切都是无用功
  • 默认user-select: none,就是::before和::after的内容无法被用户选中的

2   参考文献

[1] CSS 魔法堂:一起玩透伪元素和 Content 属性[EB/OL]. https://segmentfault.com/a/1190000016441049.

1   嵌入式代码开发

1.1   开发编译器

开源的sdcc编译器,一个优化的ansi-c交叉编译器。

2   常见接口引脚定义

USB协议官网:https://www.usb.org/

USB接口种类:https://zhuanlan.zhihu.com/p/447595295

常见USB引脚定义:https://zhuanlan.zhihu.com/p/364748197

2.1   Type-C接口

https://blog.csdn.net/qlexcel/article/details/117431413

2.2   mini usb接口

https://blog.csdn.net/eddy_liu/article/details/8316140

针脚12345
名称VCCD-D+idGND
作用+5V电压数据线负极数据线正极OTG功能接地
接线颜色红色白色绿色/黑色

2.3   充电DC圆孔

无论是公口或者母口,一般都是内正外负,不仅是5.5大小的,4、3.5、2.5等等的。不过有些厂家是对着干的,比如当年卡西欧和雅马哈电子琴所配的电源。

DC接口引脚定义

3   华硕主板灯控开发

4   锂电池

串并联符号:串联s,并联p。3s1p:三串一并,一并实际就是没有并联。比如1s1p就是单一电池。

串联增压,并联增容。

5   FPC的断裂修复

刮表层,使用焊油连接金属触点(将锡附着在焊头上)。

6   蓝牙耳机拆解

7   焊接总结

  • USB接口固定引脚的加固:一般的USB接口有两个的固定引脚,如果只在一侧加焊的话,USB接口的固定引脚仍有可能会因为长期的拔插使用导致断裂(是在没有焊点的那侧断裂的)。因此加固建议是在无焊点那侧加焊,即固定引脚两侧都有焊点。
  • 5V3针灯条的串接,上下相叠起来才能吃锡
  • BGA封装的植球焊接
    • 使用锡泥植球时,使用热风枪加热到锡泥变亮即加热成功(这个阶段一般不需要加焊油)。
    • 倘若锡泥涂抹过多,导致加热后锡球不好脱离钢网的话,可以使用镊子夹起钢网,再重新加热,并利用重力让锡球脱离钢网。

8   U盘的拆解

8.1   推拉U盘的拆解

金士顿推拉U盘示意图

大部分推拉U盘的拆解,直接将推拉外壳往外使劲一拉就能拆掉。但这种拆卸方法可能会导致外壳内侧的突起卡扣点被破坏,从而导致安装回去的推拉外壳内侧没有卡点导致失去原来的推拉限位功能。

有帖子教学无损拆解,是使用订书钉或者回形针(钳子拉直)插到外壳两侧的条形凹槽,然后将推拉外壳退回最内侧,使长针卡进外壳内侧,然后将外壳往外使劲一拉。

在拆掉推拉外壳之后,内部塑料壳就是基础的四侧卡扣结构,直接从USB口那侧用撬片撬开字形后,就可取出U盘的PCB板。

9   参考文献

R.I.P