Qt之QDockWidget窗口布局初级学习

文章目录

  • 前言
  • 一、源码
  • 二、运行案例截图


前言

本人最近在学习C++的相关知识,在使用Qt开发时想创建一种类似于Visual Studio的布局格式,有幸在CSDN搜到了一位大佬写的关于QDockWidget的布局教程
Qt之QDockWidget嵌套布局详解-实现Visual Studio布局
下面来分享下我的关于QDockWidget的布局案例


一、源码

Qt版本:6.3.0
1、首先在.ui文件,在menuBar下创建一个名为View的menu。
Qt之QDockWidget窗口布局初级学习_第1张图片

2、代码部分如下:
头文件:

//.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
    QDockWidget *dock_DataBase;
    QDockWidget *dock_3DModel;
    QDockWidget *dock_MapGIS;
    QDockWidget *dock_Tool;

    QDockWidget *dock_Center;
    QDockWidget *dock_Earth;
    QDockWidget *dock_2DModel;
    QDockWidget *dock_3DRendering;
    QDockWidget *dock_ContentView;
};
#endif // MAINWINDOW_H

cpp文件:

//.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    //删除中央窗体
    QWidget *p = takeCentralWidget();
    if(p){
        delete p;
    }

    //允许嵌套
    setDockNestingEnabled(true);


    //创建dock窗口
    dock_DataBase = new QDockWidget("基础数据",this);
    
    //设置窗口颜色,便于分辨
    QPalette p1;
    p1.setColor(QPalette::Window, Qt::darkGreen);
    dock_DataBase->setAutoFillBackground(true);
    dock_DataBase->setPalette(p1);
  
    ui->View->addAction(dock_DataBase->toggleViewAction());//添加到菜单栏 隐藏/显示

    dock_3DModel = new QDockWidget("三维模型",this);
    ui->View->addAction(dock_3DModel->toggleViewAction());

    dock_MapGIS = new QDockWidget("MapGIS",this);
    ui->View->addAction(dock_MapGIS->toggleViewAction());

    dock_Center = new QDockWidget("Center窗口",this);
    
    //设置窗口颜色,便于分辨
    QPalette p2;
    p2.setColor(QPalette::Window, Qt::gray);
    dock_Center->setAutoFillBackground(true);
    dock_Center->setPalette(p2);
    
    ui->View->addAction(dock_Center->toggleViewAction());

    dock_Tool = new QDockWidget("Tool工具箱",this);

	//设置窗口颜色,便于分辨
	QPalette p3;
    p3.setColor(QPalette::Window,Qt::darkCyan);
    dock_Tool->setAutoFillBackground(true);
    dock_Tool->setPalette(p3);
    
    ui->View->addAction(dock_Tool->toggleViewAction());

    dock_2DModel = new QDockWidget("二维视图",this);
    ui->View->addAction(dock_2DModel->toggleViewAction());

    dock_3DRendering = new QDockWidget("三维渲染视图",this);
    ui->View->addAction(dock_3DRendering->toggleViewAction());

    dock_ContentView = new QDockWidget("内容视图",this);
    ui->View->addAction(dock_ContentView->toggleViewAction());


    //指定中心窗口
//    setCentralWidget(dock_Center);



    //进行布局(先定位一个窗口,然后在进行分割,最后进行各个窗口合并)
    addDockWidget(Qt::LeftDockWidgetArea,dock_DataBase);//定位"基础数据"窗口,在左侧
    splitDockWidget(dock_DataBase,dock_Center,Qt::Horizontal);//将"数据窗口"和"中心窗口"水平分割
    splitDockWidget(dock_Center,dock_Tool,Qt::Horizontal);//将"中心窗口"和"工具箱窗口"水平分割
    tabifyDockWidget(dock_DataBase,dock_3DModel);//合并窗口
    tabifyDockWidget(dock_3DModel,dock_MapGIS);//合并窗口
    tabifyDockWidget(dock_Center,dock_2DModel);//合并窗口
    tabifyDockWidget(dock_2DModel,dock_3DRendering);//合并窗口
    tabifyDockWidget(dock_3DRendering,dock_ContentView);//合并窗口
    dock_DataBase->raise();//将"基础数据"窗口进行默认显示
    dock_Center->raise();//将"Center窗口"窗口进行默认显示



	//设置初始化 DataBase/Center/Tool三个窗口的水平方向 大小比例
    QList<QDockWidget*> temp_docklist;
        temp_docklist << dock_DataBase;
        temp_docklist << dock_Center;
        temp_docklist << dock_Tool;
    QList<int> temp_sizelist;
        temp_sizelist<< static_cast<int>(this->geometry().width() * 0.2);
        temp_sizelist<< static_cast<int>(this->geometry().width() * 0.6);
        temp_sizelist<< static_cast<int>(this->geometry().width() * 0.2);
    this->resizeDocks(temp_docklist, temp_sizelist, Qt::Horizontal);
}

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

二、运行案例截图

Qt之QDockWidget窗口布局初级学习_第2张图片


在View菜单栏下,可 隐藏/显示 指定的DockWidget
Qt之QDockWidget窗口布局初级学习_第3张图片

你可能感兴趣的:(Qt的初级学习,qt,学习)