由于工作需要用到Qt。把过程中学习到的东西记录下来,希望能帮到他人和将来的自己。
由于需要快速实现需求,所以对Qt只是使用,并没有对原理的深入理解。
故此文只适合入门,不适合深入学习Qt。
文章目录
- 安装&维护
- 示例&教程
- 构建系统
- 编译套件
- Qt命令行环境
- 半自动的内存管理
- 信号槽机制
- GUI图形界面开发
- 打包
- 帮助文档
安装&维护
-
在线安装器
-
在qt官网下载
-
选择组件,注意选择qt的版本和编译器的版本,以及ide(qt creator)。
-
lts版本较稳定。社区版的lts版本有6.2.4,5.15.2
-
-
维护工具
-
位置在qt的安装目录
-
日后可随意增删改组件
-
-
附注: 使用国内镜像源加速
- 用命令行启动在线安装器或维护工具,并加上命令行参数–mirror https://mirror.nju.edu.cn/qt
示例&教程
- 在qt creator的欢迎界面
构建系统
- qmake/cmake
- 要使用某个模块,要先在cmake/qmake中添加
- 把 头文件/源文件/资源文件/界面文件 添加到项目中
编译套件
- windows上有mingw/msvc等
Qt命令行环境
-
功能:打包、测试、预览图形界面等
-
位置:开始菜单->所有应用->Qt-> Qt x.x.xx(xx.xx.xx)
半自动的内存管理
-
继承自QObject/QWidget的对象。可以设置父对象。所有对象可以组成一个或若干个对象树。根对象被回收时它的子孙对象会自动被回收。
-
附:c++的其他内存管理方式:raii等。
信号槽机制
- 观察者模式
- 是QObject的子孙且包含Q_OBJECT宏的类,可以声明信号或槽
- 信号:用singls宏声明,只有声明没有实现
- 槽:用slots宏声明,有实现
- 例子:
//对象1发出信号1时,对象2的信号2/槽2会被触发QObject::connect( 对象1, 信号1, 对象2, 信号2/槽2 )
//对象1发出信号1时,lambda表达式会被触发
QObject::connect( 对象1, 信号1, lambda表达式 )//手动发射信号emit 对象.信号名()
GUI图形界面开发
-
界面开发方式
- widgets-based
- 直接new控件
- ui文件
- qt quick
-
程序执行时用js引擎解析qml文件,边执行边解析渲染
-
note: 如果使用cmake,图片要添加到 cmake
-
事件处理
- connect、on信号名首字母大写
-
组件,参考:
- qt quick 核心编程 第7章
- qml 组件 https://blog.csdn.net/kenfan1647/article/details/120546294
- qml 自定义控件 https://blog.csdn.net/u013718730/article/details/104160498
- qml 自定义类型 https://blog.csdn.net/beibeix2015/article/details/111991060
-
qml与c++交互
- 此文写的很细致适合入门:https://blog.csdn.net/xiezhongyuan07/article/details/109245920
- 此文总结的很全面:https://blog.csdn.net/xiezhongyuan07/article/details/109318209
- 这是demo:https://gitee.com/xx2211/projects
- 这是进阶demo
- cpp中使用qml https://blog.csdn.net/bureau123/article/details/124454536
- qml中使用cpp https://blog.csdn.net/bureau123/article/details/124378214
-
- widgets-based
-
窗口坐标系
- 左上为原点,向右为x正方向,向下为y正方向
-
view & model
- view显示数据的容器 model存储数据 delegate定义显示方式
-
自定义控件(widget)
- 继承Qt控件,修改外观、布局、添加子控件等。
- ui设计器中使用自定义控件,先使用基本控件,再“提升为”自定义控件
-
dpi, pointSize, pixeSize
- pointSize自适应,pixelSize像素单位
打包
- windeployqt命令,有时需要手动替换依赖
- 打包成一个文件:可以使用enigma virtual box工具,但可能有许可争议
- 验证打包是否成功:可以在sandbox中尝试运行
帮助文档
- 工具栏->帮助->索引
- 在线文档 https://doc.qt.io/ https://doc.qt.io/all-topics.html
- 第三方qml教程 https://blog.csdn.net/bureau123/category_11712436.html
- 第三方qt教程 https://blog.csdn.net/bureau123/category_10691949.html