qt4 gui编程学习笔记

第一章:QT入门

  • app.exec():将应用程序的控制权传递给QT,进入事件循环中,处于等待模式,等待用户的操作。
  • 可以为部件设置html样式
  • qt是模拟平台外观来实现好像看起来都是本地程序,而不是说对某个平台进行封装或有一个专门的窗口部件集合
  • 窗口布局管理器(QHBoxLayout。。。)会对放入的部件自动进行重定义其父的部件对象
  • 众多类之间的关系:

第二章:创建对话框

  • 对于定义了信号与槽的类,在类开始的Q_OBJECT宏是必需的
  • signal和slot本质上都是宏定义
  • tr(string)函数是翻译成其他语言的标记。

  • 这中的&,表示类快捷键的意思,按下快捷键时,控件接收焦点。
  • const int &a:常引用,a地址不可修改,指向的内存也不可以修改
  • 布局管理器的addstrech()函数用于设置控件之间的伸缩量
  • 布局管理器是window的直接子对象和控件是平级的

深入介绍信号与槽

  • 槽函数可以是虚函数可以冲在可以公有私有和保护,也可以直接被调用
  • 一个信号可以链接多个槽函数,调用顺序不确定
  • 多个信号可以链接一个槽
  • 一个信号可以链接另外一个信号
  • 原则上信号槽的参数要相同,如果信号参数比槽多,多余的会被直接忽略掉。

Qt的元对象系统:

  • 对cpp进行了扩展,提供两个关键技术:信号槽和内省功能。内省功能对于信号槽是必需的
  • 允许开发者在运行时获得QObject子类的元信息:包括含对象的类名和它所支持的信号与槽的列表,这一机制也支持属性和文本翻译,为Qtscript奠定基础
  • moc解析Q_Object类的定义并通过cpp函数来提供,moc使用纯cpp实现,所以元对象系统可以在任意的c++编译器上工作。
    具体工作机制:
  • 由ui文件生成的ui_ .h文件包含了有关与窗口的一些类的声明
  • setupUI函数初始化窗体,而且会将有有objectName_signalName()命名惯例的槽和信号链接到一起。
  • .ui文件是xml格式的
  • 动态对话框:使用QUiLoader载入文件,不需要uic把ui文件转成cpp的代码。
  • 动态对话框可以利用findChild()来访问窗体中中的各个子部件。
    能够使得不重新编译就能改变窗体的布局

第三章 创建主窗口

  • closeEvent是虚函数,当窗口关闭时函数会被自动调用。
  • 载入图片的方法有常见几种:
  1. 图片保存到文件,在运行时候载入
  2. 把XPM文件包含在源代码中。
  3. 使用QT的资源机制。(适用于所支持的任意文件格式,比运行时载入文件更加的方便)资源文件会被编译到可执行文件当中去,因此不用担心会弄丢他们。
  • 通过exec调用的对话框是模态的,通过show调用的是非模态的
  • QSettings保存了应用程序中与特定平台的东西,win中的是注册表,unix是存储在文本文件,macOS会使用core foundation preference的应用程序编程接口。信息是键值对的方式进行存储。
  • 使用QsplashScreen添加启动画面
    坑:使用pixmap读取图片失败,可以看图片格式是否被修改:

如果show调用后不显示,processEvent()

  • 遍历当前应用程序的所有窗口:

第四章:实现应用程序的功能

  • Qfile和QdataStream实现与平台无关的二进制文件读取接口。

  • 剪贴板的使用

第五章:自定义窗口部件