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(200,200));  mdiWin1->show();
}
MainWindow::~MainWindow()
{  delete ui;
}  

______________________________________________________________________________________________

QMdiArea

公有函数如下:

    QMdiArea(QWidget * parent = 0)  ~QMdiArea()  QMdiSubWindow * addSubWindow(QWidget * widget, Qt::WindowFlags windowFlags = 0)
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(30,30,30),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(200,200));  mdiWin1->show();
}
MainWindow::~MainWindow()
{  delete ui;
}  void MainWindow::on_pushButton_clicked()
{  ui->mdiArea->tileSubWindows();
}  

______________________________________________________________________________________________

QMdiSubWindow

函数都比较简单,列出如下:

   QMdiSubWindow(QWidget * parent = 0, Qt::WindowFlags flags = 0)  ~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 QMdiArea的介绍相关推荐

  1. Qt插件机制介绍及实现

    Qt插件机制介绍及实现 创建应用程序主窗口 创建Qt项目 编辑项目文件ImageView.pro mainwindow.cpp main.cpp mainwindow.cpp 编译运行 插件接口 实现 ...

  2. Qt的简单介绍和安装

    目录 Qt的介绍 Qt的优点 Qt的安装 Qt的介绍 Qt是一个跨平台的C++图形用户界面应用程序框架,它为应用程序开发者提供图形界面所需的所有功能. 它是完全面向对象的,很容易扩展,并且允许真正的组 ...

  3. Qt状态机框架介绍(二)

    前言 上一篇博客中已经介绍了Qt状态机的基础概念和用法,文章在这里,接下来继续介绍Qt状态机的使用. 历史状态的保存和恢复 前一个示例中,我们通过一个按钮中断状态机,在此基础上,如果我们中断状态机过后 ...

  4. 【Qt教程】Qt常用部件介绍

    这里先给大家介绍 Designer(界面设计器)中例举的常用部件,以便对 Qt 的部件有一定认识,其具体用法后面再作介绍. 布局管理组(Layouts) 空间间隔组(弹簧)(Spacers) 按钮组( ...

  5. Qt的简单介绍,发展和由来

    一.Qt的介绍 1. Qt是图形用户界面程序框架,也可以称作Qt库,能做界面的还有MFC(只能在windows下使用),GTK+ 2. Qt的由来和发展 1. Qt的历史: Qt是1991年奇趣科技公 ...

  6. QT:QObject 简单介绍

    QObject 是所有Qt对象的基类. QObject 是Qt模块的核心.它的最主要特征是关于对象间无缝通信的机制:信号与槽. 使用connect()建立信号到槽的连接,使用disconnect()销 ...

  7. qt禁止拖动_[Qt]QMdiArea,无框架窗口的拖动

    0:QMdiArea中添加子窗口后,想固定or调整窗口的大小 需要在addSubWindow()函数调用后返回子窗口的指针,然后再设置子窗口的大小 注意设置imagelabel的大小是没有效果的,im ...

  8. Qt Quick 3D介绍:Qt Quick的高级3D API

    目录 我们的目标是什么?为什么提出另一个3D解决方案? 统一图形技术 直观易用的API Qt Quick的统一工具 一流的素材优化管道 跨平台性能和兼容性 Qt Quick 3D到底是什么? 您能用Q ...

  9. Qt QMdiArea和QMdiSubWindow的基本用法

    大多数复杂的程序,都使用MDI框架,在Qt designer中可以直接将控件MDI Area拖入使用. QMdiArea一般使用于主窗口中,用于容纳多个子窗口QMdiSubWindow 代码如下: m ...

最新文章

  1. R语言使用tidyquant包的tq_transmute函数计算持有某只股票的天、月、周收益率、ggplot2使用条形图(bar plot)可视化股票年收益率数据使用不同的色彩表征正收益率和负收益率
  2. OSI参考模型和网络编程
  3. h5页面禁止复制_网页禁止鼠标右键禁止全选复制粘贴的方法
  4. DijKstra算法普通+堆优化链式向前星
  5. 史上最全总结!爬虫常见加密解密算法
  6. python协程等待执行完成_当循环运行时,如何运行协同程序并等待同步函数的结果?...
  7. coderfoces D. Gourmet choice
  8. linux下iscsi
  9. 陌陌直播公益课复课 带乡村孩子“打卡”丝绸之路
  10. 注意判断js中使用正则表达式的转义字符,到底是对谁进行转义!!!
  11. mysql全局读写怎么锁_MySQL全局锁和表锁
  12. Javaweb 九大内置对象
  13. Accessibility辅助功能的使用
  14. Windows问题记录之任务栏图标透明
  15. Postgis使用工具raster2pgsql批量导入栅格数据(一)
  16. Vue3+elementplus搭建通用管理系统实例十五:界面美化及样式调整
  17. c++:从单例到内存屏障
  18. 小程序源码:炫酷恶趣制作神器-多玩法安装简单
  19. Canvas 实用API详解
  20. logback 配置总结

热门文章

  1. 阿里又孵出一只2000亿猛兽,马云当年的眼光太狠了
  2. fiddler的web端抓包配置流程
  3. 未能加载 mysql.data_连接MySQL 提示错误”未能加载文件或程序集“MySql.Data, Version=5.1.4.0, Culture=neutral,……..” | 学步园...
  4. 关于居住办公人口的统计技术解决方案
  5. 大学生综合测评系统(C++)
  6. E-office OA 任意文件下载漏洞复现
  7. springboot请求注解的使用Get/Post
  8. 关于音频情感分类的随笔(2)
  9. 基于51单片机的电梯控制器设计资料全套。
  10. python爬虫分析大学排名_Python爬虫之爬取中国大学排名(BeautifulSoup库)