一、MDI简介

  • MDI就是多文档界面(Multi-document Interface,MDI)应用程序
  • MDI就是在主窗口里创建多个同类型的MDI子窗口,这些MDI子窗口在主窗口里显示,并共享主窗口上工具栏和菜单等操作功能,主窗口上的操作都针对当前活动的MDI子窗口进行

二、QMdiArea组件

  • 设计MDI应用程序需要在主窗口工作区放置一个QMdiArea作为MDI子窗体的容器
  • 所以我们需要事先创建窗体类对象,然后将窗口类通过addSubWindow函数添加到MDIArea组件中,然后再调用窗口类的show函数显示窗体

三、MDI的一些注意事项

  • 当在主窗口中关闭一个MDI子窗口时,这个MDI窗口对象都会删除。也可以使用setAttribute(Qt::WA_DeleteOnClose);函数显示设置在关闭MDI时删除窗口对象

四、QMDIArea组件的相关函数

addSubWindow函数

  • 此函数将一个窗口类添加到MDIArea中,然后调用窗口类的show函数显示在MDIArea中
QMdiSubWindow *QMdiArea::addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags())

activeSubWindow、widget函数

  • 该函数返回当前选中的活动的子窗口,返回的是QMdiSubWindow指针对象
  • 这样我们就可以通过activeSubWindow函数返回的QMdiSubWindow指针对象,间接通过widget函数得到该窗口的对象(但是需要强制类型转换)
QMdiSubWindow *QMdiArea::activeSubWindow() const
//头文件:#include <QMdiSubWindow>

QWidget *QMdiSubWindow::widget() const

 

subWindowList函数

  • 此函数返回MDIArea组件中的窗口类列表
  • 因此我们可以通过该函数再调用count函数获取当前MDIArea中的窗体数量
QList<QMdiSubWindow *> QMdiArea::subWindowList(WindowOrder order = CreationOrder) const

loadFormFile函数

  • 当某个窗体添加到MDIArea中之后,就可以通过此函数加载一个文件的内容
  • 参数为QString对象,该对象是通过QFileDialog::getOpenFileName函数打开的

closeAllSubWindows函数

  • 通过此函数关闭MDIArea组件中的所有窗口
void QMdiArea::closeAllSubWindows()

tabsClosable()、setTabsClosable函数

  • tabsClosable:返回当前的MDIArea中的某个窗口是否可以关闭
  • setTabsClosable:设置当前的MDIArea中的某个窗口是否可以关闭
bool tabsClosable() const

void setTabsClosable(bool closable)

viewMode、setViewMode函数

  • viewMode:返回当前MDIArea中某个窗口的显示模式
  • setViewMode:设置当前MDIArea中某个窗口的显示模式
ViewMode viewMode() const

void setViewMode(ViewMode mode)
ViewMode 类型如下:

QMdiArea::TabbedView     //Tab多页显示模式
QMdiArea::SubWindowView //子窗口模式

 窗口默认显示为“子窗口模式”显示,Tab多页显示模式如下图所示:

cascadeSubWindows、tileSubWindows函数

  • cascadeSubWindows:窗口级联模式展开显示
  • tileSubWindows:窗口平铺模式展开显示
void QMdiArea::cascadeSubWindows()

void QMdiArea::tileSubWindows()

textCut、setEditFont等函数

  • 当我们将窗口添加到MDIArea中之后,就可以调用这些函数来对窗口的字体进行格式化设置、剪切、复制

五、QMDIArea组件的信号函数

subWindowActivated信号函数

  • 当前活动窗口切换时触发此信号函数,利用此信号可以在活动窗口切换时进行一些处理
subWindowActivated(QMdiSubWindow *arg1)

六、演示案例

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐