Qt学习
Qt是一个跨平台的GUI应用程序框架
Qt窗口类主要有三个基类:
- QMainWindow 带菜单栏的窗口
- QWidget 不带菜单栏的窗口
- QDialog 对话框
常用的是窗口类QWidget
常用
一、常用操作:
1.指定父对象
对于创建出来的两个窗口,如果不指定父对象,那么这两个窗口是互相独立存在的,指定后子窗口就包含于父窗口中
比如指定 a 为 b 的父对象,即a为父窗口,b为子窗口,那么在显示的时候只要a.show()就可以显示主窗口和它的所有儿子窗口
有两种方式实现:
- 在定义的时候通过构造函数来实现:
QWidget b(&a);
- 通过setParent(&a)来实现
b.setParent(this);
2.Lamda表达式
C++11中添加的新特性,即匿名函数
配合信号使用,十分方便
普通函数
void fun()
{
//函数体
}
匿名函数
[] ()
{
//函数体
}
//一般[ ]中写 =
[ ]中可以有三种方式把外部的变量和类传入
- = 把外部所有局部变量, 类中所有成员以值传递,传递变量的形式是只读的,如果要修改 需要在()后面 加上 mutable 关键字即可
- & 把外部所有局部变量传入,引用符号,不建议使用容易出错
- this 把类中所有成员传入
3.坐标系统
- 对于主窗口,以屏幕的左上角为原点(0,0)
x轴往右递增,y轴往下递增 - 对于子窗口,以父窗口的左上角(不包含边框)为原点(0,0)x轴往右递增,y轴往下递增
- 对于子窗口中的控件,以子窗口的左上角为原点(0,0)x轴往右递增,y轴往下递增
move(x,y) ///以不变应万变
4.代码框架
#include "sample.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //应用程序类
sample w; //定义一个对象
w.show(); //展示才能看到窗口
return a.exec(); //等价于先执行a.exec(),再return 0
}
/*一般框架不变也就是自己的代码不写在main.cpp,而是写在自己定义的类即sample.cpp中*/
二、信号和槽(signal and slot)—Qt对象间通信的接口
信号顾名思义,槽则可以理解为响应信号的东西
connect(&b, &QPushButton::pressed, this, &sample::close);
/*
解释:
&b,信号发出者(指针类型)
&QPushButton::pressed,处理的信号,&类名::信号名
this,信号接收者(指针类型)
&sample::close, 槽函数,&类名::槽函数名
*/
可以实现按下按钮窗口关闭的功能
信号和槽函数 都可以自定义,可以当做类的成员函数来使用
信号自定义
- 信号必须要有signals 关键字来声明
- 信号没有返回值,但可以有参数
- 信号就是函数的声明,只需声明,无需定义
- 使用格式:emit mySignal();
槽自定义(类似普通函数的用法)
- 槽函数需要 和 信号一致(参数,返回值)
- 由于信号无返回值,故槽函数一定无返回值
三、菜单栏,工具栏和状态栏
使用基类 Q M a i n W i n d o w QMainWindow QMainWindow
菜单栏:
包含头文件
#include <QMenuBar>
#include <QMenu>
#include <QAction>
- 新建菜单栏
QMenuBar *mBar = menuBar();
- 添加菜单
QMenu *pfile = mBar->addMenu("文件");
- 添加菜单选项
QAction *pnew = pfile->addAction("新建");
- 添加选项之间的分割线
pFile->addSeparator();