《Qt开发》MDI应用程序

发布时间:2024年01月16日

实现多个子窗体的自定义布局(自定义子窗体尺寸和位置)、平铺布局(titleSubWindows)和分页模式(QMdi::TabbedView)。

运行效果图

初始布局(自定义布局)

平铺布局

多页模式

实现过程

1.创建项目和子窗体

1. 创建项目MdiFirstDemo,并创建3个子窗体,分别为FirstSubWindow、SecondSubWindow和ThirdSubWindow。

2. 在主窗体MdiFirstDemo.ui中添加三个按钮和一个MDI Area控件,设置三个按钮水平布局,三个按钮和MDI Area垂直布局。?

2.创建项目和子窗体

1. 在MdiFirstDemo.h中声明子窗体对象和初始化函数

? ? FirstSubWindow *firstSubWindow;??SecondSubWindow *secondSubWindow;

? ? ThirdSubWindow *thirdSubWindow;

? ? void InitWindow();

? ? void InitSubWindows();

? ? 在MdiFirstDemo.cpp中添加函数定义

??? void MdiFirstDemo::InitWindow()

??? {

??????? ui.mdiArea->setFixedWidth(1000);

??????? ui.mdiArea->setFixedHeight(800);

??? }

??? void MdiFirstDemo::InitSubWindows()

??? {

??????? firstSubWindow = new FirstSubWindow(this);

??????? secondSubWindow = new SecondSubWindow(this);

??????? thirdSubWindow = new ThirdSubWindow(this);

??????? ui.mdiArea->addSubWindow(firstSubWindow);

??????? ui.mdiArea->addSubWindow(secondSubWindow);

??????? ui.mdiArea->addSubWindow(thirdSubWindow);

}

3.声明三个按钮的槽函数

public slots:

void on_pBtnInitLayout_clicked();

void on_pBtnTile_clicked();

void on_pBtnTabbedView_clicked();

在MdiFirstDemo.cpp中添加槽函数定义

??? void MdiFirstDemo::on_pBtnInitLayout_clicked()

??? {

??????? ui.mdiArea->setViewMode(QMdiArea::SubWindowView);

??????? ResizeSubWindows();

??? }

??? //上面调用函数定义如下

??? void MdiFirstDemo::ResizeSubWindows()

??? {

??????? int mdiAreaWidth = ui.mdiArea->width();

??????? int mdiAreaHeight = ui.mdiArea->height();

??????? int unitWidth = mdiAreaWidth / 3;

??????? int unitHeight = mdiAreaHeight / 2;

??????? for (int i = 0; i < ui.mdiArea->subWindowList().size(); i++)

??????? {

??????????? //索引得到的子窗口顺序跟添加时顺序一致

??? ??????? QMdiSubWindow *s = ui.mdiArea->subWindowList().at(i);

??????????? //只知道这种方法可以改变子窗体尺寸

??????????? if (i == 0)

??????????? {

??????????????? QSize size(unitWidth, unitHeight);

??????????????? s->resize(size);

??????????????? s->move(0,0);

??????????? }

??????????? else if (i == 1)

??????????? {

??????????????? QSize size(unitWidth*2, unitHeight);

??????????????? s->resize(size);

??????????????? s->move(unitWidth, 0);

??????????? }

??????????? else if (i == 2)

??????????? {

??????????????? QSize size(mdiAreaWidth, unitHeight);

??????????????? s->resize(size);

??????????????? s->move(0, unitHeight);

??????????? }

??????? }

??? }

??? //平铺布局

??? void MdiFirstDemo::on_pBtnTile_clicked()

??? {

??????? //先设置为子窗口模式,在平铺布局,防止不同显示方式叠加

??????? ui.mdiArea->setViewMode(QMdiArea::SubWindowView);

??????? ui.mdiArea->tileSubWindows();

??? }

??? //多页显示

??? void MdiFirstDemo::on_pBtnTabbedView_clicked()

??? {

??????? ui.mdiArea->setViewMode(QMdiArea::TabbedView);

??????? ui.mdiArea->setTabsClosable(true); //页面可关闭

}

文章来源:https://blog.csdn.net/weixin_37934835/article/details/135617058
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。