QMdiArea类
#include <QMdiArea>
用于提供多窗口文档(MDI)的显示区域。继承自QAbstractScrollArea类。
来自Qt的官方说法是,QWorkspace是被废弃的类,它的存在就是为了使采用以前版本的Qt开发的程序能够正常运行。所以,如果你使用的是Qt4.5及以后的版本,我们强烈建议你使用QMdiArea来创建MDI应用程序。
1、详细描述
在创建MDI应用程序时,QMdiArea类的实例通常被用作主窗口的中心窗口部件,但也可以被放置于一个布局中。实际上,QMdiArea是MDI应用程序的窗口管理器。它建立、绘制、管理在它之上的子窗口,并可采用层叠或者平铺的方式排列它们。
下面的代码将一个区域的主窗口:
QMainWindow *mainWindow = new QMainWindow;
mainWindow->setCentralWidget(mdiArea);
有别于窗口管理器的顶层窗口,QMdiArea支持所有窗口的标志(QT:: WindowFlags),只要标志被当前窗口风格所支持。如果一个特定的标志不支持该窗口的风格(如WindowShadeButtonHint),你仍然可以使用showShaded()来隐藏窗口风格。
QMdiArea和QMdiSubWindow,前者主要用于创建程序主窗口的中心窗口部件,后者用于创建主窗口的各个子窗口。具体的做法是把 QMdiArea类的实例作为主窗口的中心部件,把QMdiSubWindow类的实例作为子窗口,并由QMdiArea实现对多个子窗口的管理。
QMdiSubWindow继承自QWidget,它的作用是为QMdiArea创建子窗口。它代表了在QMdiArea中创建的顶层窗口。它主要包含一个标题栏、一个内部窗口(Internal Widget)、一个窗口框架和一个大小控制手柄。QMdiSubWindow有自己的布局(Layout),在其中包含窗口标题栏以及内部窗口的中心窗口区域。
QMdiArea是所有子窗口的容器和管理器,QMdiArea中的子窗口都是QMdiSubWindow类的实例。我们通过addSubWindow()方法把它们加入到MDI应用程序中。使用时,通常先建立
一个QWidget或其子类的实例,然后把它作为参数调用addSubWindow()函数,addSubWindow()函数将把它作为子窗口的内部窗口,并填充中心窗口区域。由于QMdiSubWindow是QWidget的子类,所以你可以像使用以前我们介绍过的常见顶层窗口那样使用它,如可以调用基类QWidget的show(), hide(), showMaximized(), 以及setWindowTitle()等方法对窗口实例进行设置。
小贴士:为QMdiSubWindow创建内部窗口有两种方法,一种是调用addSubWindow(widget),其中widget参数将作为内部窗口部件;另一种是先创建一个继承自QWidget的窗口实例,然后调用setWidget(QWidget*widget)方法,把widget作为子窗口的内部窗口部件即可,这个内部窗口部件将被显示在子窗口的中心区域。注意,QMdiArea会对其内部的子窗口进行管理,你不必使用代码显式的管理它们。
新建一个子窗口类,它可派生自QWidget或其子类,比如QTextEdit。这个类的实例将作为子窗口的内部窗口部件。这个子窗口类的创建与我们前面讲到的子类化对话框和子类化QWidget的方法相同,只是它没有菜单栏、工具栏和状态栏。另外记得在主窗口的头文件中加入该子窗口类的声明。
注意:QMdiArea默认的滚动条属性是Qt:: ScrollBarAlwaysOff。
2、成员类型文档
enum QMdiArea::AreaOption
flags QMdiArea::AreaOptions
这个枚举描述选项定制QMdiArea的行为。
QMdiArea::DontMaximizeSubWindowOnActivation | 0x1 | 当活动的子窗口最大化时,默认的行为是被激活的下一个子窗口也被最大化。如果你不希望出现此行为,设置这个选项。 |
enum QMdiArea::ViewMode
这个枚举变量描述了区域的视图模式;即子窗口将被如何显示。
QMdiArea::SubWindowView | 0 | 显示带有窗框的子窗口(默认) |
QMdiArea::TabbedView | 1 | 只显示标签栏的子窗口 |
enum QMdiArea::WindowOrder
指定标准用于返回按subWindowList()排序的子窗口列表。函数cascadeSubWindows()和tileSubWindows()安排窗口时遵循这个顺序。
QMdiArea::CreationOrder | 0 | 窗口按照其创建的顺序返回 |
QMdiArea::StackingOrder | 1 | 窗口按照它们被叠放的顺序返回,最顶层的窗口在列表的最后 |
setoptionQMdiArea::ActivationHistoryOrder | 2 | 窗口按照其被激活的顺序返回 |
3、属性文档
activationOrder : WindowOrder
这个属性保存标准排序的子窗口列表。
此属性指定标准排序将使用在由subWindowList()返回的子窗口的列表中。默认情况下,它是窗口创建顺序。
background : QBrush
这个属性保存的工作区的背景。
此属性为工作区设置背景。默认情况下,它是一个灰的颜,但也可以是任意(如:颜,渐变或像素映射)。
documentMode : bool
这个属性保存的标签栏在选项卡式视图模式是否设置为文件的模式
文档模式默认情况下禁用。
tabPosition : QTabWidget::TabPosition
(当viewMode是TabbedView时)设置标签所在方向
此属性的可能值由QTabWidget:: TabPosition枚举描述
tabShape : QTabWidget::TabShape
这个属性保存在索引视图模式选项卡的形状。
(当viewMode是TabbedView时)设置该MdiArea的标签形式Qt提供两种选择:Rounded(圆,默认)和Triangular(三角形)
tabsClosable : bool
这个属性保存签视图模式下每个选项卡上的标签栏是否应该被关闭。
标签是不关闭的默认。
tabsMovable : bool
这个属性保存的是用户是否可以在标签视图模式下TabBar区中移动的标签。
标签是不可移动的默认。
viewMode : ViewMode
这个属性保存在QMdiArea下的子窗口显示的方式。
默认情况下,SubWindowView是用来显示子窗口。
4、成员函数文档
QMdiArea::QMdiArea ( QWidget * parent = 0 )
构造一个父对象为parent的MdiArea
QMdiArea::~QMdiArea ()
析构多文档窗口(MDI)
void QMdiArea::activateNextSubWindow () [slot]
激活下一个窗口
void QMdiArea::activatePreviousSubWindow () [slot]
激活上一个窗口
QMdiSubWindow * QMdiArea::activeSubWindow () const
返回当前活动子窗口,如果当前没有活动子窗口,则返回0
QMdiSubWindow * QMdiArea::addSubWindow ( QWidget * widget, Qt::WindowFlags windowFlags = 0 )
添加一个新的子窗口部件
// internalWidget1和internalWidget2为创建的widget子窗口
QMdiArea mdiArea;
QMdiSubWindow *subWindow1 = new QMdiSubWindow;
subWindow1->setWidget(internalWidget1);
subWindow1->setAttribute(Qt::WA_DeleteOnClose);
mdiArea.addSubWindow(subWindow1);
QMdiSubWindow *subWindow2 =mdiArea.addSubWindow(internalWidget2);
void QMdiArea::cascadeSubWindows () [slot]
子窗口以层叠模式来放置
void QMdiArea::childEvent ( QChildEvent * childEvent ) [virtual protected]
这个事件处理器在子类中可以被重新实现来接收子对象事件。
当子对象被插入或移除,子对象事件被发送给对象。
void QMdiArea::closeActiveSubWindow () [slot]
关闭当前活动子窗口
void QMdiArea::closeAllSubWindows () [slot]
关闭所有的子窗口
QMdiSubWindow * QMdiArea::currentSubWindow () const
返回当前活动的子窗口,如果当前没有自窗口,则返回0
bool QMdiArea::event ( QEvent * event ) [virtual protected]
这个虚函数会接收到一个对象的事件并且应该在event被识别和处理时返回真。
bool QMdiArea::eventFilter ( QObject * object, QEvent * event ) [virtual protected]
如果这个对象已经被安装为object对象的一个事件过滤器,就过滤事件。
在这个函数你的重新实现中,如果你想过滤出e事件,比如,停止它的进一步处理,返回真,否则返回假。
QSize QMdiArea::minimumSizeHint () const [virtual]
返回这个多文档窗口部件的建议最小大小。
void QMdiArea::paintEvent ( QPaintEvent * paintEvent ) [virtual protected]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论