QT提供默认的几类只有QMainWindow,QWidget,QDialog三种,这三种窗体是最常见的,QMainWindow带有菜单栏和工具栏的主窗口类,QDialog是各种对话框的几类,而他们全部继承自QWidget.
他们之间详细的关系如下:
窗口和部件以及窗口类型
窗口部件是QT中建立用户元素的主要部件,其中作为部件附属于其他窗口的可以简称为部件,而没有上级的成为窗口(根)
看一段代码:
这段程序定义了一个QDialog :w1,两个QLabel: label1和label2.
在这里需要注意的是所有的定义都使用new()开辟空间,所以在最后都需要执行delete操作。
如:
在这段程序里我们分析各个部件之间的关系。因为label1没有绑定任何父类,所以他是一个独立的窗口,而label2在新定义的时候, QLabel *label2=new QLabel(w1);
就被绑定上了w1所以其父是w1.
所以有如下的一些特点:
- label1可以单独显示,而label2不可以单独显示,如果显示w1则显示w1的全部子部件,即label2也被显示出来。
在delete的时候,label1和label2都可以单独被销毁,但是如果如果w1被销毁,那么w1的所有子部件也全部被销毁。
窗口类型
QT有非常多的窗口类型,QWidget的构造函数有两个参数
一个是QWidget *parent=0
这个参数主要负责该窗口部件的附属关系,默认是0,表示是一个独立窗口,两一个参数是Qt::WindowFlags
这个参数主要负责的是这个窗口部件的类型。
比如我们可以12QDialog *w1=new QDialog(0,Qt::Dialog);QLabel * label1=new QLabel(0,Qt::SplashScreen);其效果:
也可以使用位或操作如:123QDialog *w1=new QDialog(0,Qt::Dialog|Qt::FramelessWindowHint);QLabel * label1=new QLabel(0,Qt::SplashScreen|Qt::WindowStaysOnTopHint);
更加详细的样式,用到再说。窗口的几何布局
这里的函数主要分为两类,一类是包含框架的,另一个事不包含框架的。- 包含框架的:x(),y(),frameGemetry(),pos(),move()函数
不包含框架的:genmetry(),width(),height(),rect()和size()函数。
实例程序:123456789101112131415using namespace std;int main(int argc,char *argv[]){ QApplication a(argc,argv);QWidget w;int x=w.x();int y=w.y();QRect gemetry=w.geometry();QRect frame=w.frameGeometry();return a.exec();}
其中
分别返回窗口部件的坐标值x,y,他们的默认值是0.
而geometry和frameGeometry()函数分别返回没有边框的和包含边框矩形的值,其返回值是QRect类型的,就是一个矩形,他的形式是(x,y,height,width)
在这里我们使用QDebug进行调试。
程序
在引入了QDebug头文件之后,可以直接使用qDebug()函数qDebug()<<x<<" "<<y<<" "<<gemetry<<" "<<frame;
这句语句可以输出。
其结果如下: