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;
}
效果:
QDockWidget
QDockWidget是一个窗口小部件,它可以被放置在QMainWindow的任何一个dock区域内,以及浮动状态。它主要用于实现类似于PhotoShop、CAD等软件中的工具栏和侧边栏的功能。
QDockWidget由两部分组成:标题栏和内容窗口。标题栏包含了标题和一些按钮,用户可以通过点击按钮来改变QDockWidget的状态。而内容窗口则是QDockWidget真正要显示的内容。
使用QDockWidget需要注意以下几点:
在QMainWindow中使用QDockWidget时,需要将QDockWidget设置为QMainWindow的子窗口。这可以通过调用QMainWindow的addDockWidget()函数来实现。
QDockWidget有三种状态:停靠状态、浮动状态、隐藏状态。可以通过setFloating()和setVisible()函数来改变QDockWidget的状态。
可以通过setAllowedAreas()函数来设置QDockWidget允许停靠的区域。
可以通过setFeatures()函数来设置QDockWidget支持哪些特性,如可关闭、可移动、可改变大小等。
QDockWidget支持嵌套,即将一个QDockWidget放置在另一个QDockWidget中。
可以通过QMainWindow的saveState()和restoreState()函数来保存和恢复QDockWidget的状态。
#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
#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);//关闭移动
}