使用Qt编写多文档界面(MDI)应用相当方便,主要会使用到QMdiArea和QMdiSubWindow两个类。可以查看Qt Asistant中这两个类的说明文档,里面介绍的相当详细。另外,可以搜索例程"Mdi Example",这是提供的一个示例程序,这是一个多文档编辑器,代码很详细,只是缺少注释,不过很简单,应该容易看懂。接下来,我在这里介绍最简单、最精华的部分。

1 QMdiArea

这个类相当于一个MDI窗口管理器,用来管理添加到这个区域中的多个子窗口。我们在应用中新建的所有子窗口都需要通过addSubWindow()方法添加到其中。一般情况下,QMdiArea被用作QMainWindow的中央部件,但是,你也可以将它添加到任意的布局中。下面的代码就是将其添加到中央部件:

 QMainWindow *mainWindow = new QMainWindow;
mainWindow->setCentralWidget(mdiArea);

2 QMdiSubWindow

  这个类继承自QWidget,主要用来创建MDI子窗体实例。然后,可以通多调用QMdiArea的addSubWindow()方法将新建的子窗体实例添加到多文档界面区域。当然,我们也可以不用QMdiSubWindow类来创建子窗体,而直接使用继承自QWidget的类,比如下面的代码:

 void MainWindow::actNewWindow()
{
QLabel *label = new QLabel;
m_mdiArea->addSubWindow(label);
label->show();
}

  不过,使用QMdiSubWindow类的话,我们可以使用其提供的一些方便的成员方法,详细内容请参看帮助手册,下面给出一段示例代码:

 void MainWindow::actNewWindow()
{
QLabel *label = new QLabel;
QMdiSubWindow *subWin = new QMdiSubWindow;
subWin->setWidget(label);
subWin->setAttribute(Qt::WA_DeleteOnClose);
m_mdiArea->addSubWindow(subWin);
subWin->show();
}

3 示例程序

最后,再给出一个简单的应用示例。这个代码中,我们使用最简单的Qt向导创建一个QMainWindow应用。然后,在菜单中添加一个“New”菜单项,用来每次创建一个子窗体,并显示在MDI区域。每个子窗体就是一个QLabel部件,用来显示一个标签。构造函数代码如下:

 #include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); //Create a MDI Area
m_mdiArea = new QMdiArea;
this->setCentralWidget(m_mdiArea); connect(ui->actionNew, SIGNAL(triggered()), this, SLOT(actNewWindow()));
}

对应的新建子窗体槽函数定义如下:

 void MainWindow::actNewWindow()
{
QLabel *label = new QLabel(tr("MDI SubWindow!"));
QMdiSubWindow *subWin = new QMdiSubWindow;
subWin->setWidget(label);
subWin->setAttribute(Qt::WA_DeleteOnClose);
m_mdiArea->addSubWindow(subWin);
subWin->show();
}

程序运行效果如下:

Qt多文档界面应用设计的更多相关文章

  1. 基于WPF系统框架设计(5)-Ribbon整合Avalondock 2.0实现多文档界面设计(二)

    AvalonDock 是一个.NET库,用于在停靠模式布局(docking)中排列一系列WPF/WinForm控件.最新发布的版本原生支持MVVM框架.Aero Snap特效并具有更好的性能. Ava ...

  2. 第15.37节 PyQt(Python+Qt)入门学习:containers容器类部件QMdiArea多文档界面部件详解及编程开发案例

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 老猿在前期学习PyQt相关知识时,对每个组件的属性及方法都研 ...

  3. 在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理

    在基于DevExpress的多文档窗口界面中,我们一般使用XtraTabbedMdiManager来管理多文档窗口的一些特性,如顶部菜单,页面的关闭按钮处理,以及一些特殊的设置,本篇随笔介绍这些特点, ...

  4. 【Windows编程】系列第十一篇:多文档界面框架

    前面我们所举的例子中都是单文档界面框架,也就是说这个窗口里面的客户区就是一个文档界面,可以编写程序在里面输入或者绘制文本和图形输出,但是不能有出现多个文档的情况.比如下面的UltraEdit就是一个典 ...

  5. qt 单文档程序关闭时在delete ui处出现segmentation fault

    做了个显示图片的单文档程序. qt 单文档程序关闭时在delete ui处出现segmentation fault. 调试发现调用两次mainwindow析构函数. http://blog.csdn. ...

  6. 多文档界面的实现(DotNetBar的superTabControl)

    private void FormMain_Load(object sender, EventArgs e) { superTabControl2.Tabs.Clear(); timer1.Start ...

  7. Winfrom多文档界面实现

    Winfrom多文档界面实现 闲来无事,研究了下比较常用的多文档界面风格,网上找了好多例子,最终实现.记录一下 废话不多说,先上个效果: 默认打开我的桌面,首页不允许关闭,xtraTabPage动态添 ...

  8. 多文档界面QMdiArea

    当使用多文档界面功能时,我们是将QMdiArea作为主窗口的中央部件,然后在这个中央部件中,我们可以同时打开很多个子窗口QMdiSubWindow 样式: import sys from PyQt5. ...

  9. pyqt助手中安装Qt帮助文档

    一.个人安装环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 4.通过Anaco ...

随机推荐

  1. Windows Phone开发-开发环境和结构

    Windows Phone 7.1的开发工具发布了,一直对WP7很关注,现在终于可以开始学习了.其实09年就学习过silverlight,看过3的SDK文档,当时因为工作,断断续续也没有坚持下来,所以 ...

  2. Codeforces Round #200 (Div. 1)D. Water Tree dfs序

    D. Water Tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/343/problem/ ...

  3. MySQL Cluster测试过程中的错误汇总--ERROR 1296 (HY000)等等

    参考资料: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-privilege-distribution.html http://www.cl ...

  4. android学习日记18--Adapter简介

    一.Adapter 1.简述 最近学的GridView和Gallery 都有用到Adapter适配器,发现它貌似蛮重要的.专门上网搜了下有关Adapter的资料.android绝大多数应用是JAVA语 ...

  5. IntelliTrace 调试、定位异常

    最近看了一个开源数据库管理,然后没有认真看它的配置环境,想看看是什么东西, 然后发现有类型转换的错误,但是一下子也定位不到哪里出错? 所以对于这种一下子找不到异常在哪里的,可以使用intellitra ...

  6. careercup-中等难度 17.3

    17.3 写一个算法计算n的阶乘末尾0的个数? 解答: 首先,算出n的阶乘的结果再去计算末尾有多少个0这种方法是不可取的, 因为n的阶乘是一个非常大的数,分分种就会溢出.我们应当去分析, 是什么使n的 ...

  7. windows远程关机重启

    windows远程关机 http://lsscto.blog.51cto.com/779396/245681 shutdown http://baike.baidu.com/view/596875.h ...

  8. JavaScript网站设计实践(一)网站结构以及页面效果设计

    这是JavaScript DOM编程艺术里的构建JavaScript网站设计的例子,这本书给我学习JavaScript带来许多启发,在这个乐队宣传网站中,把前面学到的知识点整合在这个项目了.在这里记录 ...

  9. A XSS filter for Java EE web apps--转载

    原文地址:http://java.dzone.com/articles/xss-filter-java-ee-web-apps Cross Site Scripting, or XSS, is a f ...

  10. JAVA_JDBC

    测试类: 1 import java.util.ArrayList; import java.util.List; /** * 创建数据库: * 1.加载驱动 * Class.forName(&quo ...