qt学习笔记
part 1基本思路
学习目标:
(熟练)使用 qt 制作符合要求的 ui
faq:
1)学习qt5还是qt4?
重要的是学习的方法而不是内容,掌握了正确的学习方法就可以很快完成另一者的学习,综合来看,qt4的资料较为全面,入门起来应该比较快。
达成方式:
学会使用 assistant 找到合适的 class 和 子函数 即可
:先决条件:知道都有什么可用的 class 和 对应的子函数
练习方式:实战(教材结合assistant)
以熟悉 class 和 子函数 为主
达标要求:
完成 基础 部分
中级 部分完成一半
基本构建思路:
1、使用 designer 完成基本界面的绘制
2、添加继承类完成信号和槽的连接
需要掌握的:
1、添加中间层的一般方法
2、常用的信号和槽
part 2 具体方法
1、文件的划分
1)一般对于一个功能使用两个文件,头文件存放声明,实现文件存放实现
2)main 函数单独放一个文件
2、没有什么功能是添加一个中间层解决不了的,如果有就再添加一个
3、头文件的写法
0)头文件本质上是充当了与外界接口的作用,其中想让外界访问(接入)的函数/变量使用 public, 否则使用 protected 和 private
0.5)构造函数一般是public的, 同时默认 qwidget *parent = 0
1)首先使用 #ifndef 来避免重复调用,后边的名字为头文件名(全大写,点号变为下划线)
2)包含头文件时尽量不包含集成头文件,避免程序的运行变得臃肿
3) 当使用系统自带的基本类框架时,一般声明一个自己的类,让他继承自该框架类
4)在头文件中进行自建类的定义时也不对其成员进行定义,而是只声明
5)为了能够对自建类进行调用,首先必须包含的就是构造函数(不定义,只声明)
6)其次是这个类需要用的的信号和槽
7)最后是涉及到的函数和变量
4、实现文件的写法
0)实现文件的主要功能是完善头文件中所提出的功能,因此第一件事就是完善头文件中未定义的自建类
1)在出现显示字符串的位置加上 tr() 以提供翻译功能
2)在出现文本的地方使用 “&+字母” 来设置该部件的快捷键
3)标签本身不提供功能,但可以为其他没有文字的部件设置快捷键(需要使用“设置伙伴”功能)
4)要想使用其他cpp文件提供的功能,必须包含与之对应的头文件
5、designer的用法
0)用designer生成的是一个头文件,需要写出对应的接口(一套头文件和实现文件)以丰富其功能并接入其他文件中去
1)创建的常见顺序:
1)创建子窗口部件
2) 布局
3)设置tab键顺序
4)连接信号与槽
5)实现自定义槽
2)要注意修改部件的名称以方便随后加入自定义槽(可以只修改后续要调用的)
6、主窗口的创建
1)主窗口与对话框的不同:
1)声明和定义构造函数时不传入父窗口(因为是主窗口了, 肯定没有父窗口)
2)mainwindow.h的结构:
1)public: 构造函数
2)protected: closeevent()
3)private:
1)slots:要实现的功能
2)普通函数:生成窗口过程中要用到的函数
3)字段:mainwindow中用到的变量
3)mainwindow.cpp
1)类定义
1)设置主窗口
2)创建动作
3)创建菜单
4)创建上下文菜单
5)创建工具栏
6)创建状态栏
7)设置图标
8)其他功能
4)使用图片
要使用图片需要创建对应的资源文件(.qrc),并在工程文件(.pro)中加上一行 : resources = ****.qrc
5)使用内置的提示框
int r = qmessagebox::type(parent, title, message, buttons)
//type 可选 warning, information, question, critical, 决定了弹出对话框的图案
//parent 为父窗口
//tile, message 分别为标题和显示的信息
//buttons 为窗口中提供的默认按钮, 有 qmessage::yes, qmessage::no, qmessage::cancel ......
// 显示多个按钮用 | 分割
6)使用内置的文件对话框
qstring filename = qfiledialog::getopenfilename(parent, title, folder, filter);
//parent 为父窗口
//title 为标题
//folder 为开始寻找的目录
//filter 为文件过滤器,格式为 “说明 + (通配符)”, 如有多个则用\n分割
//例如: "spreadsheet files (*.sp) \n comma-separated values files (*.csv)"
7)去除文件名中的路径:
qstring name = qfileinfo(fullfilename).filename();
8) 对话框的调用
1)非模态(可以挂在后台的)
dailog = new mydialog(this); //实例化
connect(......); //建立连接
dialog->show(); //显示窗口
dialog->raise(); //挂在顶层
dialog->activatewindow(); //激活窗口
2)模态(用完后就关闭,并且不允许切换至同应用的其他窗口)
mydialog dialog(this); //实例化
if(dialog.exec()){ //运行(显示窗口)
connect(......); //建立连接
}
delete dialog; //释放内存