5 父窗口

5.1 父窗口和子窗口

创建组件时,可以指定其停靠在某个父窗口之上。这时组件将作为子窗口被束缚于其父窗口之内,并随父窗口一起移动、隐藏、显示和关闭,否则该组件将作为独立窗口显示在屏幕上,且游离于其它窗口之外。

5.2 父窗口的类型

任何QWidget类及其子类的对象,都可以做为其它组件的父窗口。常见的被用做父窗口的类有三个,它们是QWidget、QMainWindow和QDialog。

5.3 父窗口是子窗口的容器

作为子窗口的容器,父窗口的析构函数将负责销毁其所有的子窗口。即使这些子窗口是通过new操作符动态创建的,也不必显式地通过delete操作符销毁它们。只要父窗口被销毁了,其中的所有子窗口也就随之被销毁了,完全无需担心内存泄漏问题。

5.4 窗口的位置和大小

无论是父窗口还是子窗口,都可以通过其move和resize方法,设置窗口的位置和大小:

move方法的两个参数分别表示窗口矩形左上角的水平和垂直坐标。顶层窗口使用屏幕坐标系,其它窗口使用其父窗口的窗口坐标系。屏幕坐标系的坐标原点位于屏幕矩形的左上角,窗口坐标系的坐标原点位于窗口矩形的左上角。屏幕坐标系和窗口坐标系的X轴水平向右为正,Y轴垂直向下为正。resize方法的两个参数分别表示窗口矩形的宽度和高度。无论是位置坐标,还是窗口宽高,单位均为像素,即显示器的最小显示单位。

5.5 案例

在父窗口中放置子窗口。

C:\Users\Minwei\Projects\Qt\Parent\main.cpp:

运行效果如图所示: