QSplitter & QDockWidget

QSplitter

QSplitter是一个Qt库中的控件,用于在窗口中拆分区域。它是一个水平或垂直的分隔栏,可以使用户调整区域大小以适应其需要。QSplitter提供了一种简单而有效的方式来管理窗口中的空间布局。

QSplitter类有两个主要成员:QSplitterHandle和QSplitterWidget。QSplitterHandle是一个分隔栏,用户可以通过拖动它来改变区域大小。QSplitterWidget则是一个包含子部件的容器,可以在其中添加和移除子部件。

使用QSplitter创建一个分割窗口非常简单。您只需在Qt Designer中将QSplitterWidget添加到窗体中,并在其中添加所需的子部件。

深入理解:

用于在GUI中创建分割窗口。它允许用户拖动分隔条来调整窗口的大小,从而改变面板之间的相对大小。

QSplitter可以横向或纵向使用,并且可以包含任意数量的窗口小部件。当用户改变窗口大小时,QSplitter会自动调整各个面板的大小以适应新的窗口尺寸。这使得QSplitter成为实现自适应布局的重要工具。

除了基本的拆分窗口功能外,QSplitter还有一些其他的特性。例如,您可以锁定某些面板,以保持其大小不变;或者您可以设置最小和最大大小限制,以确保面板不会太小或太大。

举例:

mainwindow.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;
    QTextEdit *te1,*te2,*te3,*te4,*te5;
    QSplitter *qsl;
};
#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);

    qsl=new QSplitter(Qt::Horizontal,0);  //分割窗口 之后添加的窗口都按水平排序
    te1=new QTextEdit("左边主窗口",qsl); //向qsl添加第一个窗口

    QSplitter *qsl_you=new QSplitter(Qt::Vertical,qsl); //向qsl再添加一个分割窗口 之后添加的窗口都按垂直排序
    te2=new QTextEdit("右窗口1",qsl_you); //向qsl_you中添加第一个窗口
    te3=new QTextEdit("右窗口2",qsl_you);  //向qsl_you中添加第二个窗口

    QSplitter *qsl_youxia=new QSplitter(Qt::Horizontal,qsl_you); //向qsl_you添加第三个 为分割窗口的窗口
    te4=new QTextEdit("右下窗口1",qsl_youxia);//向qsl_youxia中添加第一个窗口
    te5=new QTextEdit("右下窗口2",qsl_youxia);//向qsl_youxia中添加第一个窗口

    te2=new QTextEdit("最右窗口",qsl); //向qsl_zuiyou中添加一个窗口




    qsl->show();
}

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

效果:

QSplitter & QDockWidget_第1张图片

QDockWidget

QDockWidget是一个窗口小部件,它可以被放置在QMainWindow的任何一个dock区域内,以及浮动状态。它主要用于实现类似于PhotoShop、CAD等软件中的工具栏和侧边栏的功能。

QDockWidget由两部分组成:标题栏和内容窗口。标题栏包含了标题和一些按钮,用户可以通过点击按钮来改变QDockWidget的状态。而内容窗口则是QDockWidget真正要显示的内容。

使用QDockWidget需要注意以下几点:

  1. 在QMainWindow中使用QDockWidget时,需要将QDockWidget设置为QMainWindow的子窗口。这可以通过调用QMainWindow的addDockWidget()函数来实现。

  2. QDockWidget有三种状态:停靠状态、浮动状态、隐藏状态。可以通过setFloating()和setVisible()函数来改变QDockWidget的状态。

  3. 可以通过setAllowedAreas()函数来设置QDockWidget允许停靠的区域。

  4. 可以通过setFeatures()函数来设置QDockWidget支持哪些特性,如可关闭、可移动、可改变大小等。

  5. QDockWidget支持嵌套,即将一个QDockWidget放置在另一个QDockWidget中。

  6. 可以通过QMainWindow的saveState()和restoreState()函数来保存和恢复QDockWidget的状态。

mainwindow.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;
    void DockWidgetFunc(); //实现停靠窗口
};
#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);
    DockWidgetFunc();
}

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


void MainWindow::DockWidgetFunc()
{
    this->setWindowTitle("停靠窗口测试——————");

    QTextEdit *qte1=new QTextEdit(this);
    qte1->setAlignment(Qt::AlignCenter); //设置文本对其为中心对其
    this->setCentralWidget(qte1); //将编辑框控件设置为主窗口的中央窗口



    //创建窗口1
    QDockWidget *qdw1=new QDockWidget("停靠窗口1",this);
    qdw1->setFeatures(QDockWidget::DockWidgetMovable);//可移动
    qdw1->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);  //只能左右停靠

    addDockWidget(Qt::RightDockWidgetArea,qdw1);  //设置qdw1初始停靠位置为右停靠


    QTextEdit *qte=new QTextEdit;
    qdw1->setWidget(qte);
    qte->setText("aaaaaaa");


    //创建窗口2
    QDockWidget *qdw2=new QDockWidget("停靠窗口2",this);
    QTextEdit *qte2=new QTextEdit;
    qdw2->setWidget(qte2);
    qte2->setText("aaaaaaaasdadaaa");
    addDockWidget(Qt::RightDockWidgetArea,qdw2);  //设置qdw1初始停靠位置为右停靠
    qdw2->setFeatures(QDockWidget::DockWidgetClosable);//关闭移动

}

效果:

QSplitter & QDockWidget_第2张图片

你可能感兴趣的:(qt笔记-布局,对话框,qt,开发语言)