Qt--QMdiArea和QMdiSubWindow的基本用法
2017-07-29 08:46
429 查看
大多数复杂的程序,都使用MDI框架,在Qt designer中可以直接将控件MDI Area拖入使用。QMdiArea一般使用于主窗口中,用于容纳多个子窗口QMdiSubWindow 代码如下:mainwindow.h
1 #ifndef MAINWINDOW_H2 #define MAINWINDOW_H34 #include <QMainWindow>5 #include <QTextEdit>6 #include <QLabel>7 #include <QMdiSubWindow>89 namespace Ui {10 class MainWindow;11 }1213 class MainWindow : public QMainWindow14 {15 Q_OBJECT1617 public:18 explicit MainWindow(QWidget *parent = 0);19 ~MainWindow();2021 private:22 Ui::MainWindow *ui;23 QMdiSubWindow *newwin;2425 private slots:26 void on_btnCloseAll_clicked();27 void on_btnClose_clicked();28 void on_btnNext_clicked();29 void on_btnPrevious_clicked();30 void on_btnNewWindow_clicked();31 void on_btnRemoveWindow_clicked();3233 };3435 #endif // MAINWINDOW_Hmainwindow.cpp
1 #include "mainwindow.h"2 #include "ui_mainwindow.h"34 MainWindow::MainWindow(QWidget *parent) :5 QMainWindow(parent),6 ui(new Ui::MainWindow)7 {8 ui->setupUi(this);910 //window111 QTextEdit *window1 = new QTextEdit;12 window1->setHtml("C");13 ui->mdiArea->addSubWindow(window1); //将window1放进mdiArea框架1415 //window216 QTextEdit *window2 = new QTextEdit;17 window2->setHtml("C++");18 ui->mdiArea->addSubWindow(window2);1920 //window321 QTextEdit *window3 = new QTextEdit;22 window3->setHtml("Java");23 ui->mdiArea->addSubWindow(window3);2425 //window426 QTextEdit *window4 = new QTextEdit;27 window4->setHtml("Hello World");28 ui->mdiArea->addSubWindow(window4);2930 ui->mdiArea->cascadeSubWindows(); //SubWindows重叠排列3132 connect(ui->pushButton_6,SIGNAL(clicked()),this,SLOT(on_btnPrevious_clicked()));33 connect(ui->pushButton_7,SIGNAL(clicked()),this,SLOT(on_btnNext_clicked()));34 connect(ui->pushButton_8,SIGNAL(clicked()),this,SLOT(on_btnClose_clicked()));35 connect(ui->pushButton_9,SIGNAL(clicked()),this,SLOT(on_btnCloseAll_clicked()));36 connect(ui->pushButton_10,SIGNAL(clicked()),this,SLOT(on_btnNewWindow_clicked()));37 connect(ui->pushButton_11,SIGNAL(clicked()),this,SLOT(on_btnRemoveWindow_clicked()));38 }3940 MainWindow::~MainWindow()41 {42 delete ui;43 }4445 void MainWindow::on_btnCloseAll_clicked()46 {47 ui->mdiArea->closeAllSubWindows();48 }4950 void MainWindow::on_btnClose_clicked()51 {52 ui->mdiArea->closeActiveSubWindow();53 }5455 void MainWindow::on_btnNext_clicked()56 {57 ui->mdiArea->activateNextSubWindow();58 }5960 void MainWindow::on_btnPrevious_clicked()61 {62 ui->mdiArea->activatePreviousSubWindow();63 }6465 void MainWindow::on_btnNewWindow_clicked()66 {67 newwin = new QMdiSubWindow;68 newwin->setWindowTitle("test");69 newwin->setWidget(&QLabel("hey"));70 newwin->setAttribute(Qt::WA_DeleteOnClose);71 newwin->resize(200,200);72 ui->mdiArea->addSubWindow(newwin);73 newwin->show(); //在非构造函数不加show(),不显示74 //setActiveSubWindow(QMdiSubWindow *window); 设置active窗口75 }7677 void MainWindow::on_btnRemoveWindow_clicked()78 {79 ui->mdiArea->removeSubWindow(ui->mdiArea->currentSubWindow()); //remove 当前窗口80 }Demo: 上图中的子窗口就是QMdiSubWindow窗口 QMdiArea类的函数解析:QMdiSubWindow *addSubWindow(QWidget *widget, Qt::WindowFlags flags = Qt::WindowFlags()); //在MDI区域中添加SubWindow子窗口。void removeSubWindow(QWidget *widget); //删除MDI区域中SubWindow子窗口void setBackground(const QBrush &background); //设置MDI区域的背景,默认为灰色void setActivationOrder(WindowOrder order); //设置激活顺序,默认以创建先后激活,槽函数中有调用void setOption(AreaOption option, bool on = true); //现只有一个选项,即创建子窗口,窗口不充满这个区域,默认是充满的 void setViewMode(ViewMode mode); //设置视口模式,默认area中很多小窗口,也可以是有tabBar形式的,设置tab的函数,都需要先开启这个 void setDocumentMode(bool enabled); //设置文档模式void setTabsClosable(bool closable); //默认为否。设置为true时,tab上会出现一个关闭的小按钮void setTabsMovable(bool movable); //设置是否可移动,默认为false,可以移动时,可拖动tab在tabBar上移动void setTabShape(QTabWidget::TabShape shape); //设置tab的形状,默认长方形,也可以是梯形void setTabPosition(QTabWidget::TabPosition position); //设置tabBar的方位,有东南西北四方位 void activateNextSubWindow(); //act下一个子窗口void activatePreviousSubWindow(); //act上一个子窗口void closeActiveSubWindow(); //关闭active的子窗口void closeAllSubWindows(); //关闭所有子窗口void cascadeSubWindows(); //MDI区域内的所有子窗口重叠排列void tileSubWindows(); //将所有子窗口在MDI区域内排列整齐void setActiveSubWindow(QMdiSubWindow *window); //设置active窗口为window void subWindowActivated(QMdiSubWindow *window); //signals信号,为切换激活的子窗口时发出的信号 enum QMdiArea::WindowOrder :QMdiArea::CreationOrder 0 按创建时的先后顺序QMdiArea::StackingOrder 1 堆叠顺序QMdiArea::ActivationHistoryOrder 2 按激活历史前后顺序 enum QMdiArea::ViewMode :QMdiArea::SubWindowView 0 以小窗口形式显示(默认)QMdiArea::TabbedView 1 不仅可小窗口,而且形成tabBar enum QTabWidget::TabShape :QTabWidget::Rounded 0 tab形状为方形,默认QTabWidget::Triangular 1 tab形状为梯形 enum QTabWidget::TabPosition :QTabWidget::North 0 tab在上方显示QTabWidget::South 1 tab在下方QTabWidget::West 2 tab在左方QTabWidget::East 3 tab在右方
相关文章推荐
- Qt之QMdiArea与QMdiSubWindow基本用法详解
- QMdiArea和QMdiSubWindow的基本用法
- qt 基本用法
- qt qtableview基本用法
- qt qtableview基本用法
- Qt5.9中控件listWidget用法(基本用法)
- qt 样式表基本用法
- qt的qpushbutton的基本qss 用法
- QTableView基本用法讲解,Qt表格控件的使用方法
- Qt的QTableview的基本用法和配置
- QTcpSocket、QTcpServer基本用法
- QT,QVector 基本用法,遍历[实例讲解]
- QTcpServer基本用法
- [QT]QTreeWidget 的基本用法
- QT学习笔记之QT5 + VS2013/VS2015 中文乱码解决办法以及ListView,TableView,TreeView的基本用法
- Qt QMdiArea,QMdiSubWindow——子区域和子窗口
- QT,QVector 基本用法,遍历[实例讲解]
- QTableView基本用法讲解,Qt表格控件的使用方法
- glide:基本用法
- linux下sed基本用法详解