Qt之QMdiArea使用

MDI 应用程序就是在主窗口里创建多个同类型的 MDI 子窗口,这些 MDI 子窗口在主窗口里显示,并共享主窗口上的工具栏和菜单等操作功能,主窗口上的操作都针对当前活动的 MDI 子窗口进行。

设计 MDI 应用程序需要在主窗口工作区放置一个 QMdiArea 作为子窗体的容器。
可视化方式创建一个基于 QWidget 的类 PlayerWindow
playerwindow.h文件

#ifndef PLAYERWINDOW_H
#define PLAYERWINDOW_H

#include <QWidget>

namespace Ui {
class PlayerWindow;
}

class PlayerWindow : public QWidget
{
    Q_OBJECT

public:
    explicit PlayerWindow(QWidget *parent = nullptr);
    ~PlayerWindow();

private:
    Ui::PlayerWindow *ui;
};

#endif // PLAYERWINDOW_H

playerwindow.cpp文件

#include "playerwindow.h"
#include "ui_playerwindow.h"

PlayerWindow::PlayerWindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::PlayerWindow)
{
    ui->setupUi(this);
}

PlayerWindow::~PlayerWindow()
{
    delete ui;
}

创建主窗口框架MainWindow的类 mainwindow
mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
class QMdiArea;
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_actionPlayer_triggered(bool checked);

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp文件

#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QFile>
#include <QDebug>
#include <QMdiSubWindow>
#include "mainwindow.h"
#include "playerwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);	
    ui->mdiArea->setTabShape(QTabWidget::Rounded);   // 设置table标签样式
    ui->mdiArea->setTabsClosable(true);              // 设置table标签有关闭按钮图标
    ui->mdiArea->setViewMode(QMdiArea::TabbedView);  // 设置table模式
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_actionPlayer_triggered(bool checked)
{
    if (checked){
        PlayerWindow *pPlayer = new PlayerWindow(this);   //新建子窗口
        QMdiSubWindow *sbw = new QMdiSubWindow;
        sbw->setWidget(pPlayer);
        sbw->setStyleSheet("background-color: black");
        sbw->setAttribute(Qt::WA_DeleteOnClose);
        ui->mdiArea->addSubWindow(sbw);                  //添加子窗口到mdiarea容器中
        sbw->show();                                     //显示子窗口
    }
    else{
        ui->mdiArea->closeActiveSubWindow();  //关闭子窗口
    }
}
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页