Qt6 C++开发指南:第一章「认识Qt」习题答案
1   第一章:认识Qt
1.1   Qt简介
- 跨平台应用程序开发框架
- 首次发布于1995年5月
- qt官网:www.qt.io
1.1.1   跨平台开发能力
目标设备 | 目标平台 | 主机平台 |
---|---|---|
桌面Linux | 桌面Linux | |
计算机 | macOS | macOS |
Windows | Windows | |
Android | 桌面Linux、 macOS、Windows | |
移动设备 | iOS | macOS |
手机Windows | Windows | |
嵌入式Linux | 桌面Linux | |
嵌入式设备 | QNX | 桌面Linux、 Windows |
VxWorks | 桌面Linux、 Windows | |
嵌入式Windows | Windows | |
单片机 | 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支持的开发语言
- C++ 和 QML
- Qt 对标准C++语言进行了扩展,引入了信号与槽等机制。
- QML ( Qt Meta Language) 是一个用来描述应用程序界面的声明式脚本语言。
- C++和QML可以混合使用。
- 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新建工程的一些总结:
- 应用类型:
- Widgets:widget界面
- Console:控制台程序
- Quick:QML实现的界面
- base class基础类:
- QMainWindow:主窗口类,包括菜单栏、工具栏、状态栏
- QWidget :可以创建一个空白的窗口,是所有界面组件的基类
- QDialog :对话框类(比如创建工程弹出的窗口就是对话框类型,对话式窗口,比如下一步按钮继续执行)
- 翻译文件:i18国际化语言
C语言总结笔记
1   语言摘记
1.1   结构体的定义和引用
1 | // 定义结构体 |
2   开发记录
2.1   关于字节的一些记录
int在机器上占一个字长,而32位机器 一个字长就是4Byte,64位机器 一个字长就是8Byte。这里指的是在64位机器上的运行64位操作系统,计算的sizeof(int)。
这个说法不太正确,gcc编译64bit的程序,sizeof(int)输出为4,即4Byte,32bit。
3   参考文献
css总结笔记
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.