Qt QMdiArea和QMdiSubWindow的基本用法

admin 2022年9月19日00:42:05评论255 views字数 4133阅读13分46秒阅读模式

大多数复杂的程序,都使用MDI框架,在Qt designer中可以直接将控件MDI Area拖入使用。

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

 

代码如下:

mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H
#include #include #include #include
namespace Ui {class MainWindow;}
class MainWindow : public QMainWindow{ Q_OBJECT
public: explicit MainWindow(QWidget *parent = 0); ~MainWindow();
private: Ui::MainWindow *ui; QMdiSubWindow *newwin;
private slots: void on_btnCloseAll_clicked(); void on_btnClose_clicked(); void on_btnNext_clicked(); void on_btnPrevious_clicked(); void on_btnNewWindow_clicked(); void on_btnRemoveWindow_clicked();
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);
//window1 QTextEdit *window1 = new QTextEdit; window1->setHtml("C"); ui->mdiArea->addSubWindow(window1); //将window1放进mdiArea框架
//window2 QTextEdit *window2 = new QTextEdit; window2->setHtml("C++"); ui->mdiArea->addSubWindow(window2);
//window3 QTextEdit *window3 = new QTextEdit; window3->setHtml("Java"); ui->mdiArea->addSubWindow(window3);
//window4 QTextEdit *window4 = new QTextEdit; window4->setHtml("Hello World"); ui->mdiArea->addSubWindow(window4);
ui->mdiArea->cascadeSubWindows(); //SubWindows重叠排列
connect(ui->pushButton_6,SIGNAL(clicked()),this,SLOT(on_btnPrevious_clicked())); connect(ui->pushButton_7,SIGNAL(clicked()),this,SLOT(on_btnNext_clicked())); connect(ui->pushButton_8,SIGNAL(clicked()),this,SLOT(on_btnClose_clicked())); connect(ui->pushButton_9,SIGNAL(clicked()),this,SLOT(on_btnCloseAll_clicked())); connect(ui->pushButton_10,SIGNAL(clicked()),this,SLOT(on_btnNewWindow_clicked())); connect(ui->pushButton_11,SIGNAL(clicked()),this,SLOT(on_btnRemoveWindow_clicked()));}
MainWindow::~MainWindow(){ delete ui;}
void MainWindow::on_btnCloseAll_clicked(){ ui->mdiArea->closeAllSubWindows();}
void MainWindow::on_btnClose_clicked(){ ui->mdiArea->closeActiveSubWindow();}
void MainWindow::on_btnNext_clicked(){ ui->mdiArea->activateNextSubWindow();}
void MainWindow::on_btnPrevious_clicked(){ ui->mdiArea->activatePreviousSubWindow();}
void MainWindow::on_btnNewWindow_clicked(){ newwin = new QMdiSubWindow; newwin->setWindowTitle("test"); newwin->setWidget(&QLabel("hey")); newwin->setAttribute(Qt::WA_DeleteOnClose); newwin->resize(200,200); ui->mdiArea->addSubWindow(newwin); newwin->show(); //在非构造函数不加show(),不显示 //setActiveSubWindow(QMdiSubWindow *window); 设置active窗口}
void MainWindow::on_btnRemoveWindow_clicked(){ ui->mdiArea->removeSubWindow(ui->mdiArea->currentSubWindow()); //remove 当前窗口}

Demo:

Qt QMdiArea和QMdiSubWindow的基本用法

上图中的子窗口就是QMdiSubWindow窗口

 

Qt QMdiArea和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的基本用法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年9月19日00:42:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Qt QMdiArea和QMdiSubWindow的基本用法https://cn-sec.com/archives/1302919.html

发表评论

匿名网友 填写信息