1. QMainWindow/QWidget/QDialog的区别
QMainWindow是带有菜单栏窗口的基类,一般用于PC端;QWidget是Qt所有控件的基类,是普通窗口;QDialog是对话框的基类。它们都是Qt的基类,没有从属关系,只是创建的GUI属性不一样。
2.Qt的基本框架
// QApplication应用程序类
//Qt头文件没有.h,头文件和类名一样
#include <QApplication>
int main(int args,char** argv)
{
//有且只有一个应用程序类的对象
QApplication app(args,argv);
//下面是coder自定义代码(创建窗口对象并显示等等)
//让程序一直执行,等待事件发生
app.exec();
return 0;
}
3.Q_OBJECT宏
当一个类中需要利用信号或槽机制进行通讯时,必须在该类定义中包括该宏。一般是在类所对应的头文件中的类定义里的第一行写上Q_OBJECT即可。
4.指定父对象
○1指定和不指定父对象的区别:不指定父对象,则各个窗口是相互独立的;a指定其父对象为b,则a显示在b界面上,还有就是b显示则a自动显示(不需要手动写a.show()).
○2指定父对象的方法:1) setParent() 子类对象调用setParent()方法; b. setParent(&a)
2)构造函数传参 子类对象创建时传入父类指针。 &b=new B(&a)
5.信号与槽
○1 信号与槽通过connect()函数实现绑定的,其本质是Qt对象之间的信号传递。
○2 自定义信号:
信号必须用关键字signals来声明 signals: void mySignal()
信号函数的返回值为void,但可以有参数
信号就是函数声明,只需声明,无需定义
使用:emit mySignal()
备注:自定义信号最终都会依赖Qt的基础信号,即Qt中的槽函数最开始都是Qt中基础信号触发的。自定义信号的过程:基础信号调用包含发送自定义信号的槽函数,该槽函数出发它包含的信号函数,然后该自定义信号触发它的槽函数。
connect(&a,A::basicSignal,&b,solt);
connect(&c,C::signal1,&d,slot1);
basicSignal是基础信号,solt包含自定义的signal1(即其函数体内包含代码:emit signal1())
○3 自定义槽:
槽就是普通函数(成员函数,全局函数,静态函数等)
槽函数需要与信号一致,带参数的信号函数会把其参数值传递给槽函数形参(参数和返回值相同)
由于信号返回值为void,所以,槽函数一定没有返回值
备注:Qt4槽函数必须用slots关键字修饰
○4 C++11增加新特性:lambda表达式(匿名函数)
connect(&obj1,signal,
[]()
{
//to do
})
该方法需要在工程里设置“CONFIG +=C++11”,[]里一般写“=”表示lambda函数体里可以操作外部变量,()里是函数参数,{}里是函数体。
6.Qt的坐标系统
记住一句话:Qt的坐标原点在左上角,Qt控件的参考系是其父对象。
另外,Qt的独立窗口(没有父对象的ui)其参考系是显示屏。
7.内存回收机制
Qt支持内存自动回收(主要指的是堆上分配的对象,不需要用delete进行手动释放)