QMdiArea 一般使用于主窗口QMainWindow,用于容纳多个子窗口QMdiSubWindow

qt creator 3.0的设计师有MdiArea可直接拖入使用。

界面如下,图中灰色框即是个MdiArea,另一图中创建了2个QMdiSubWindow :
代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSize>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->actionNew,SIGNAL(triggered()),this,SLOT(creatNewWin()));//actionNew是通过设计师创建的动作 } void MainWindow::creatNewWin()
{
mdiWin1=new QMdiSubWindow;
mdiWin1->setWindowTitle("未定");
ui->mdiArea->addSubWindow(mdiWin1);
mdiWin1->resize(QSize(,));
mdiWin1->show();
}
MainWindow::~MainWindow()
{
delete ui;
}

______________________________________________________________________________________________

QMdiArea

公有函数如下:
    QMdiArea(QWidget * parent = )
~QMdiArea() QMdiSubWindow * addSubWindow(QWidget * widget, Qt::WindowFlags windowFlags = )
void removeSubWindow(QWidget * widget)
void setActivationOrder(WindowOrder order)//设置激活顺序,默认以创建先后激活,槽函数中有调用,枚举值见1
void setBackground(const QBrush & background)//设置背景,默认灰色
void setDocumentMode(bool enabled)
void setOption(AreaOption option, bool on = true)//现只有一个选项,即创建子窗口,窗口不充满这个区域,默认是充满的,枚举值见2
void setViewMode(ViewMode mode)//设置视口模式,默认area中很多小窗口,也可以是有tabBar形式的,以下这些设置tab的函数,都需要先开启这个。枚举值见3
void setTabPosition(QTabWidget::TabPosition position)//设置tabBar的方位,有东西南北四方位,遵循地理的上北下南左西右东枚举值见4
void setTabShape(QTabWidget::TabShape shape)//设置tab的形状,默认长方形,也可以像谷歌浏览器那样,梯形,枚举值见5
void setTabsClosable(bool closable)//默认否,设为true时,tab上方形成一个关闭小按钮
void setTabsMovable(bool movable)//设置是否可移动,默认false,可移动时,可拖动tab在tabBar上移动,现在的浏览器大多有这样的功能 QList<QMdiSubWindow *> subWindowList(WindowOrder order = CreationOrder) const
QMdiSubWindow * currentSubWindow() const
WindowOrder activationOrder() const
QBrush background() const
bool documentMode() const
bool testOption(AreaOption option) const
QMdiSubWindow * activeSubWindow() const
QTabWidget::TabPosition tabPosition() const
QTabWidget::TabShape tabShape() const
bool tabsClosable() const
bool tabsMovable() const
ViewMode viewMode() const

Public Slots

void    activateNextSubWindow()
void activatePreviousSubWindow()
void cascadeSubWindows()
void closeActiveSubWindow()
void closeAllSubWindows()
void setActiveSubWindow(QMdiSubWindow * window)
void tileSubWindows()//将所有子窗口在area的可视部分排列整齐

Signals

void    subWindowActivated(QMdiSubWindow * window)//切换激活的窗口时发出  

1,enum QMdiArea::WindowOrder

Constant Value Description
QMdiArea::CreationOrder 0 按创建时的先后顺序
QMdiArea::StackingOrder 1 堆叠顺序
QMdiArea::ActivationHistoryOrder 2 按激活历史前后顺序.

2,enum QMdiArea::AreaOption
flags QMdiArea::AreaOptions

Constant Value Description
QMdiArea::DontMaximizeSubWindowOnActivation 0x1 激活时不使它最大化,默认是最大化的

3,QMdiArea::ViewMode

Constant Value Description
QMdiArea::SubWindowView 0 以小窗口形式显示(default).
QMdiArea::TabbedView 1 不仅可小窗口,而且形成tabBar

4,enum QTabWidget::TabPosition

Constant Value Description
QTabWidget::North 0 上方显示
QTabWidget::South 1
QTabWidget::West 2
QTabWidget::East 3

5,enum QTabWidget::TabShape

Constant Value Description
QTabWidget::Rounded 0 字面是圆形,但win7上更像长方形,default
QTabWidget::Triangular 1 字面三角形,说它是梯形更好些

在以上代码中修改,图中是执行tileSubWindows()函数后的结果:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSize>
#include <QTabWidget>
#include <QBrush>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QBrush b=QBrush(QColor(,,),Qt::FDiagPattern);
ui->mdiArea->setBackground(b);
ui->mdiArea->setViewMode(QMdiArea::TabbedView);
ui->mdiArea->setTabPosition(QTabWidget::North);
ui->mdiArea->setTabsClosable(true);
ui->mdiArea->setTabsMovable(true);
ui->mdiArea->setTabShape(QTabWidget::Triangular);
ui->mdiArea->setOption(QMdiArea::DontMaximizeSubWindowOnActivation); connect(ui->actionNew,SIGNAL(triggered()),this,SLOT(creatNewWin())); } void MainWindow::creatNewWin()
{
mdiWin1=new QMdiSubWindow;
mdiWin1->setWindowTitle("未定");
ui->mdiArea->addSubWindow(mdiWin1);
mdiWin1->resize(QSize(,));
mdiWin1->show();
}
MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::on_pushButton_clicked()
{
ui->mdiArea->tileSubWindows();
}

______________________________________________________________________________________________

QMdiSubWindow
函数都比较简单,列出如下:
   QMdiSubWindow(QWidget * parent = , Qt::WindowFlags flags = )
~QMdiSubWindow() void setKeyboardPageStep(int step)
void setKeyboardSingleStep(int step)
void setOption(SubWindowOption option, bool on = true)//未试效果,求补充,枚举值见1
void setSystemMenu(QMenu * systemMenu).se.
void setWidget(QWidget * widget)//主要通过个函数添加它的小部件 int keyboardPageStep() const
int keyboardSingleStep() const
QMdiArea * mdiArea() const
QMenu * systemMenu() const
QWidget * widget() const
bool testOption(SubWindowOption option) const
bool isShaded() const

Public Slots

void showShaded()
void showSystemMenu()
Signals
void aboutToActivate()
void windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)

1,enum QMdiSubWindow::SubWindowOption

Constant Value Description
QMdiSubWindow::RubberBandResize 0x4 If you enable this option, a rubber band control is used to represent the subwindow's outline, and the user resizes this instead of the subwindow itself. As a result, the subwindow maintains its original position and size until the resize operation has been completed, at which time it will receive a single QResizeEvent. By default, this option is disabled.
QMdiSubWindow::RubberBandMove 0x8 If you enable this option, a rubber band control is used to represent the subwindow's outline, and the user moves this instead of the subwindow itself. As a result, the subwindow remains in its original position until the move operation has completed, at which time aQMoveEvent is sent to the window. By default, this option is disabled.

Qt Widgets——子区域和子窗口的更多相关文章

  1. Qt Widgets——主窗口及其主要组成部分

    Main Window and Related Classes QAction 动作类,用于当做一个菜单项或工具项插入菜单或工具栏 QActionGroup 动作组,用于管理多个动作,设置它们之间的互 ...

  2. 使用Python实现子区域数据分类统计

    目录 前言 geopandas简介 子区域数据分类统计 总结 一.前言        最近碰到一个需求,需要统计某省内的所有市的某数据分布情况信息.现有该省的数据分布情况以及该省的行政区划数据.我通过 ...

  3. QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)

    使用QT编辑界面,其中带来很大方便的一点就是Qt中自带丰富的.种类齐全的类及其功能函数,程序员可以在编辑程序的过程中简单地直接调用.关于窗口关闭的操作,在这里指出常用的三个槽,即quit(),exit ...

  4. c# 子线程打开子窗体

    下边是在子线程打开子窗口,结果跑到else 里边了跨线程操作窗体控件InvokeRequired失效,无法用于打开子窗体,addonetwo.InvokeRequired,访问不了呢? 大神知道帮忙回 ...

  5. 公布Qt Widgets桌面应用程序的方法

    公布Qt Widgets桌面应用程序的方法 Qt是一款优秀的跨平台开发框架,它能够在桌面.移动平台以及嵌入式平台上执行.眼下Qt 5介绍程序公布的文章帖子比較少.大家又很想要知道怎样公布Qt应用程序, ...

  6. CSS 实现:父元素包含子元素,子元素垂直居中布局

    ☊[实现要求]:父元素包含子元素,子元素垂直居中布局 <div class="demo5"> <div class="child">A& ...

  7. QT5中的pro文件中为何要加入"QT += widgets"

    在pro文件里写"QT+=widgets"表示引入QtWidget这个module,qmake在生成makefile的时候,会设置好include path 和 lib path, ...

  8. 【QT相关】Qt Widgets Module

    Qt Widgets Module:提供了一些列UI元素. 使用: //头文件包含 #include <QtWidgets> //链接模式,在.pro文件中添加行: QT += widge ...

  9. Sql Server的艺术(六) SQL 子查询,创建使用返回多行的子查询,子查询创建视图

    子查询或内部查询或嵌套查询在另一个SQL查询的查询和嵌入式WHERE子句中. 子查询用于返回将被用于在主查询作为条件的数据,以进一步限制要检索的数据. 子查询可以在SELECT,INSERT,UPDA ...

随机推荐

  1. 转 class和struct最本质的区别

    class和struct最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别. 什么是class? class(类)是面向对象编程的基本概念,是一种自定义数据结构 ...

  2. 单源最短路——Dijkstra模板

    算法思想: 类似最小生成树的贪心算法,从起点 v0 每次新拓展一个距离最小的点,再以这个点为中间点,更新起点到其他点的距离. 算法实现: 需要定义两个一维数组:①vis[ i ] 表示是否从源点到顶点 ...

  3. leetcode 29-> Divide Two Integers without using multiplication, division and mod operator

    class Solution(object): def divide(self, dividend, divisor): """ :type dividend: int ...

  4. 如何将SqlServer中表结构以及表数据全部导出

    不记录,很快就忘记了:记录了,仿佛也记得更牢了 步骤如下: Step1:右击数据库,弹出的标签中选择Tasks---Generate Scripts... Step2: 弹出新窗口中,勾选" ...

  5. PL/SQL Developer安装配置

    选择tool下的perferences 修改下面标记的内容即可

  6. idea中svn的使用教程

    引言:以下是idea集成小乌龟后的svn使用教程,一张图足以说明问题,后续如果遇到了比较复杂一点的问题再来补充. 参考文档:https://blog.csdn.net/liuhailiuhai12/a ...

  7. Python self,init,对象属性

    self关键字的作用 __init__初始化 # coding=utf-8 支持中文 class Human(object): laugh = 'Ha' def show_laugh(self): p ...

  8. 使用pymongo连接mongodb时报错:pymongo.errors.OperationFailure: not authorized

    连接本机或局域网部署的mongodb时可以用以下方法: from urllib import parse from pymongo import MongoClient host = '*.*.*.* ...

  9. Http请求处理流程 管道流程 MVC扩展HttpModule

    HttpApplication  封装了管道处理请求的所有事件 HttpModule 对HttpApplication中事件的扩展 HttpHandler   处理程序  每个请求都要经过Handle ...

  10. 基于反射实现实体DTO映射

    对象类型转换还可以通过序列化和反序列化 先把一个对象序列化成字符串  然后反序列化成另外一个对象 通过表达式树 字段缓存 泛型缓存效率更高