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. jdk1.8和tomcat9.0、maven3.5.0配置教程

    一.jdk环境变量 JAVA_HOME :C:\Program Files\Java\jdk1.8.0_77(这个是你安装JDK时的路径,按照实际情况改成你自己的目录) CLASSPATH:   .; ...

  2. css的postion属性

    在实际项目中,发现postion这个属性经常使用而且常常很重要,所以总结整理一下知识点 css中postion属性有以下可选值,分别是:static,absolute, fixed, relative ...

  3. 使用lombok 找不到方法

    在setting里面查找并设置就好了

  4. 懒懒的Rain的寒假小结

    快开学了,才发现这个寒假算是又废了,放假前满满的雄心壮志要刷多少多少题回家写一会都不行了,唉,在家真不适合学习.可能还是因为没有学习的气氛吧,在家老是就自己一个人,遇到问题或者出现什么错误了没有人可以 ...

  5. 常见字符集&乱码问题

    字符集 常用字符集分类 ASCII及其扩展字符集 作用:表语英语及西欧语言. 位数:ASCII是用7位表示的,能表示128个字符:其扩展使用8位表示,表示256个字符. 范围:ASCII从00到7F, ...

  6. 《剑指offer》第五十八题(翻转单词顺序)

    // 面试题58(一):翻转单词顺序 // 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. // 为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a ...

  7. 类的调用1(被调用的MyFirstJava)

    package com.mec.MyFirstJavaLife.text; public class MyFirstJava { /**   * @param args   */ private in ...

  8. ionic 搜索双向数据绑定失效

    1.用data对象存储变化的数据 js: $scope.data={}; $scope.data.keywords = ""; $scope.search = function() ...

  9. 连续子数组和 Continuous Subarray Sum

    2018-10-03 01:12:42 问题描述: 问题求解: 本题本质上其实是一个preSum问题的变种,每次求preSum % k,并将之保存到map中,如果之后再次得到相同的余数,则表示这两者之 ...

  10. VIM编辑器和VI编辑器的区别

    vi 和vim 的区别 写在前面:这个两个"东西"着实让我烦恼一阵子,但是自己一直没当回事,但是遇到了好几次再决定彻底把他们搞的明白,一下是我通过查找资料了解到的关于这两个编辑器的 ...