《Qt开发》MDI应用程序

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

运行效果图

初始布局(自定义布局)

《Qt开发》MDI应用程序_第1张图片

平铺布局

《Qt开发》MDI应用程序_第2张图片

多页模式

《Qt开发》MDI应用程序_第3张图片

实现过程

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); //页面可关闭

}

你可能感兴趣的:(qt,开发语言)