QMdiArea widget 提供了一个可以在上面显示多窗口的区域。
本质上,像一个管理多窗口的窗口管理器,它在自己上面绘制要管理的窗口,并以cascading(串联)或者是tile(瓦片)模式安排显示的多窗口。
QMdiArea 一般用作QMainWindow的centralWidget(如果要创建多窗口的话),但是它也可以在任何Layout中。下面的代码将在QMainWindow中添加一个QMdiArea
QMdiArea * mdiArea = new QMdiArea; QMainWindow * mainWindow = new QMainWindow; mainWindow->setCentralWidget(mdiArea);
不像顶级窗口的窗口管理器那样,只要当前widget style 支持的Qt::WindowFlags,QMdiArea都支持。
在QMdiArea中的子窗口都是QMdiSubWindow的实例。他们通过addSubWindow()添加到QMidArea中。
一个子窗口当它得到keyboard focus时,或者setFocus()被调用时被激活。用户用一般的方法就可以激活一个窗口。当active window 改变时,Mdi area 会发射一个subWindowActived()的信号,activeSubWindow()
返回一个active subWindow。
subWindowList()返回一个subWindow 的list。很有用,例如,可以用来弹出包含subWindow信息的菜单。
subWindow 有排练顺序,默认是当前WindowOrder。subWindowList() 和 activeNextSubWindow()和
activePreviousWindow()都依赖这个顺序。两种排列模式cascadeSubWindow()和tileSubWindow()也用的到。
这个WindowOrder有3种:
enum QMdiArea::WindowOrder { QMdiArea::CreationOrder = 0, QMdiArea::StackingOrder = 1, QMdiArea::ActivationHistoryOrder = 2 };
1,按创建顺序。
2,在栈中的顺序。
3,历史激活的顺序。