当前位置: 首页 > news >正文

Qt 总结

由于工作需要用到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
  • 窗口坐标系

    • 左上为原点,向右为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
http://www.lryc.cn/news/331708.html

相关文章:

  • 中间件复习之-RPC框架
  • AcWing 787. 归并排序——算法基础课题解
  • 力扣1379---找出克隆二叉树的相同节点(Java、DFS、简单题)
  • FLink学习(三)-DataStream
  • Failed to resolve import “Home/components/HomeNew.vue“. Does the file exist?
  • 《价值》-张磊-高瓴资本-3-建立人脉和信任;顺应趋势,把握机遇;
  • 游戏引擎中的物理应用
  • 复现k8s黄金票据学习
  • 08-JavaScript BOM定时器及JS动画
  • 边缘计算盒子与云计算:谁更适合您的业务需求?
  • 浅聊什么是Redis?
  • java算法day43 | ● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
  • 练气第六天
  • 认识 Redis 与 分布式
  • Linux初学(十二)AWK进阶
  • 文字识别 Optical Character Recognition,OCR CTC STN
  • 四、MySQL读写分离之MyCAT
  • 通讯录项目实现
  • xss相关知识点与绕过思路总结
  • 深入解析语言模型:原理、实战与评估
  • Elasticsearch 的索引优化常规项
  • 【JavaParser笔记01】JavaParser解析Java源代码中的类信息(javadoc注释、类​​​​​​​名称)
  • Stable Diffusion扩散模型【详解】小白也能看懂!!
  • 关于rabbitmq的prefetch机制
  • 机器学习介绍
  • OpenCV4.9开发之Window开发环境搭建
  • DDD 中的实体和值对象有什么区别?
  • 算法-最值问题
  • Go 性能压测工具之wrk介绍与使用
  • 数学思想论(有目录)