必备基础:
- 快捷键:
- Ctrl+R运行 Ctrl+i自动对齐 Ctrl+
Main函数:
Qapplication a,只有一个。
Widget,窗口实例化对象
W.show()显示窗口。
A.exec()进入消息循环。
3 常用的控件API:
QpushButton *btn=new Qpushbutton(构造函数,可以设置参数text
,parent等)
Setparent()依赖窗口
Settext() move() resize() setwindowtitle() setfixedsize()固定大小
显示中文问题:工具-选项—文本编辑器-行为-默认编码-设置位utf-8
对象数学习:
当你创建一个Qobject对象(或者派生),或创建一个表children(),将自己的子对象放进去。当父类对象被析构的时候,其children表里的子对象也会被优先析构。(不用管释放问题了)其实就是对象树。一定程度上减轻了 内存回收机制。
虽然这个功能很好,但是也会带来一些问题。我们最好在构造的时候就指定parent对象,这样可以减少很多问题。
小技术:#include《Qdebug》 qdebug《《“information”可以输出调试信息。
坐标系与MFC一样左上角为原点。
信号和槽的概念:
将一系列事件联系起来:用connect(需要参数)
- 信号的发送者 2.发送的信号 3.信号的接受者 4.信号处理 (槽函数)
用信号将事件联系起来。
本来这几件事是没有关联的,独立的;通过connect()将他们联系(耦合)联系起来;
信号为signals
关联函数Connect:
一个槽可以绑定多个信号,一个信号也可以绑定多个槽;
但是信号与槽的参数必须一致;
Connect函数如何写 :connect(对象,&对象::signals,对象指针*,槽函数slots)
自定义信号与自定义slots槽:
需求:Teacher类 student类下课后老师触发信号,学生下课
Teacher:public Qobject
默认生成一个写自定义信号的位置:即类里的signals:下
signals://自定义信号写在signals下:
//是函数的形式,不需要返回值,只需声明不需要实现。
//可以有参数,或者重载。
//关于槽函数:早期的qt必须要将槽函数写到public slots:下但是现在可以写到public下或者全局函数
//返回值void 需要声明与实现;
//可以有参数,可以重载
事件的触发:
信息发送emit 前缀例如 emit 对象->signals函数();
重载信息与槽:
信号所带的参数类型和槽函数的参数类型要一一对应。如果信号不带参数,那么槽函数的参数也要为空,就像connect(thread, SIGNAL(started()), work, SLOT(first()));started()信号与first()槽函数的参数都为空。但是如果二者的参数类型不一样,该如何处理了?
可以增加第三个函数来传递这个信息
重载信息和曹以后,发现Connect函数报错,无法匹配到对应的函数,因为无法区分重载对吧;
所以Qt用到了一个技术,函数指针,也可以用函数指针数组,在指定函数指针的时候需要标注成员函数的作用域,因为是成员函数的缘故。
小知识:qDEBUG()中,输入char*没引号,输出QString会自动添加引号;
所以QString.touft8可以先转成qbyteArray再转成Char*用QByteArray的data()
通过查它的成员函数,观察其成员函数的返回值找的对应的函数;
为信息的触发绑定控件:
Connect(控件对象,控件对象信号引用,接受者,处理函数)
信号与信号连接:
依然使用connect()函数,可以将两个对象的两种信号关联起来用函数名
需要注意的是如果你的信号参数不完全一样,将无法连接两个信号。
对于信号的补充:
信号和槽的参数不是一定要相同的,信号的参数可以多于槽函数的参数,但是信号的类型一定要一样。
可以了解一下老版本的Qtconnect()其中的信号要这么写SIGNAL(信号名()) 其中的槽函数这么写 Slot(槽函数名())
Qt4的缺点是没法检测参数类型,即不能直观的看出信号与槽函数的参数是否有差别
所以很多时候,Qt程序会在信号与槽函数绑定的时候出错。
断开信号:
如何断开信号呢?disconnect()参数完全一样
Lambda表达式:
用于创建定义匿名的函数,以简化编程工作
Lambda表达式的形式:
在Qt4以前需要在pro文件里面加入
Config +=C++11
而之后则不需要这一步操作。
[capture](paraments)mutable->return-type
{
statement
}
其中[]是Lambda表达式的开始标志,[]里面可以有参数:
- 空,表示没有使用参数
- =,表示可以使用Lambda表达式的局部作用域中的所有可见的局部变量,包括Lambda在所在类的this,并且是以值传递的形式(与引用形式互斥)
- &,与=符号的作用类似,但是是以引用传递方式
- This,函数体内可以使用lambda所在类的成员变量
Qt框架的基本印象:
最外层的是pro文件即project;将各种文件联系起来,起到统筹全局的作用是统帅。
旗下各种文件分为:
Headers文件 与source文件source文件里面放着各种的Cpp文件是headers文件的方法实现。
Cpp文件中主要有main.cpp 和各种Qobject派生类的实现为主;
Main。Cpp中程序的入口组成:
创建程序Qappliction-》创建程序窗口-》窗口显示-》进入消息循环。
相对于MFC appliction对象不是全局的,与mainwindow也没什么联系。