水平分裂器和竖直分裂器是Qt框架中的常用控件,用于创建可以调整大小的子窗口布局。它们通过分割器(splitter)将窗口区域分成多个可独立调整大小的部分。
#include "demo7_splitter.h"
#include <QBoxLayout>
#include <QSplitter>
#include <QTextBrowser>
demo7_splitter::demo7_splitter(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
this->setWindowTitle("Qt水平分裂器C++代码");
//整体用水平布局
//水平布局里面有一个水平分裂器布局
//水平分裂器布局里面有一个Widget和一个竖直分裂器布局
//竖直分裂器布局里面有一个Widget和TextBrowser
//水平布局
QHBoxLayout* pHLay = new QHBoxLayout(this);
//水平分裂器
QSplitter* pHSplitter = new QSplitter(Qt::Horizontal, this);
//左边的Widget
QWidget* pLeftWidget = new QWidget(this);
pLeftWidget->setMinimumWidth(200);
pLeftWidget->setStyleSheet("background-color:rgb(54,54,54)");
pHSplitter->addWidget(pLeftWidget);
//右边的垂直分裂器
QSplitter* pVSplitter = new QSplitter(Qt::Vertical, pHSplitter);
pVSplitter->setOpaqueResize(false);
//右边的Widget
QWidget* pRightWidget = new QWidget(this);
//右边的TextBrowser
QTextBrowser* pRightBottom = new QTextBrowser(this);
pRightWidget->setStyleSheet("background-color:rgb(154,154,154)");
pVSplitter->addWidget(pRightWidget);
pVSplitter->addWidget(pRightBottom);
pHSplitter->addWidget(pVSplitter);
pHLay->addWidget(pHSplitter);
setLayout(pHLay);
}
demo7_splitter::~demo7_splitter()
{}
复盘
#include "demo7_splitter.h"
#include <QBoxLayout>
#include <QSplitter>
#include <QTextBrowser>
// 构造函数
demo7_splitter::demo7_splitter(QWidget *parent)
: QWidget(parent)
{
// 设置UI
ui.setupUi(this);
// 设置窗口标题
this->setWindowTitle("Qt水平分裂器C++代码");
// 整体用水平布局
// 水平布局里面有一个水平分裂器布局
// 水平分裂器布局里面有一个Widget和一个竖直分裂器布局
// 竖直分裂器布局里面有一个Widget和TextBrowser
// 创建水平布局
QHBoxLayout* pHLay = new QHBoxLayout(this);
// 创建水平分裂器
QSplitter* pHSplitter = new QSplitter(Qt::Horizontal, this);
// 创建左边的Widget
QWidget* pLeftWidget = new QWidget(this);
pLeftWidget->setMinimumWidth(200); // 设置最小宽度
pLeftWidget->setStyleSheet("background-color:rgb(54,54,54)"); // 设置背景颜色
// 将左边的Widget添加到水平分裂器
pHSplitter->addWidget(pLeftWidget);
// 创建右边的垂直分裂器
QSplitter* pVSplitter = new QSplitter(Qt::Vertical, pHSplitter);
pVSplitter->setOpaqueResize(false); // 设置调整大小时不透明
// 创建右边的Widget
QWidget* pRightWidget = new QWidget(this);
// 创建右边的TextBrowser
QTextBrowser* pRightBottom = new QTextBrowser(this);
// 设置右边Widget的背景颜色
pRightWidget->setStyleSheet("background-color:rgb(154,154,154)");
// 将右边的Widget添加到垂直分裂器
pVSplitter->addWidget(pRightWidget);
// 将右边的TextBrowser添加到垂直分裂器
pVSplitter->addWidget(pRightBottom);
// 将垂直分裂器添加到水平分裂器
pHSplitter->addWidget(pVSplitter);
// 将水平分裂器添加到水平布局
pHLay->addWidget(pHSplitter);
// 设置主窗口的布局
setLayout(pHLay);
}
// 析构函数
demo7_splitter::~demo7_splitter()
{}
分裂器
QSplitter* pHSplitter = new QSplitter(Qt::Horizontal, this);
QSplitter:
QSplitter 是 Qt 框架中的一个类,用于创建可以调整大小的子窗口布局。
它允许用户通过拖动分割条来动态调整窗口中各个子控件的大小。
Qt::Horizontal:
Qt::Horizontal 是一个枚举值,表示分裂器的方向为水平。
Qt::Vertical
表示竖直方向分裂器.
水平分裂器将窗口区域水平分割为多个部分,分割条在垂直方向上,用户可以水平拖动分割条来调整每个部分的宽度。
这个位置的枚举值只有这两个,用来表示分裂器的方向,是水平分裂器还是数值分裂器.
this:
this 指针表示当前对象,是分裂器的父对象。
在 Qt 中,父对象负责管理子对象的生命周期。当父对象销毁时,所有的子对象也会被销毁。
这行代码创建了一个新的水平分裂器 pHSplitter,并将其父对象设置为当前对象(通常是一个窗口或小部件)。
这个水平分裂器可以添加多个子控件,通过水平拖动分割条来调整这些子控件的宽度。
setOpaqueResize
pVSplitter->setOpaqueResize(false); // 设置调整大小时不透明
这行代码设置了垂直分裂器(QSplitter)在调整大小时的透明度选项.
pVSplitter:
pVSplitter 是一个垂直分裂器(QSplitter)对象。
它负责在垂直方向上分割窗口区域,使用户可以通过拖动分割条来调整每个部分的高度。
setOpaqueResize(false):
setOpaqueResize(bool opaque) 是 QSplitter 类的一个成员函数。
这个函数设置分裂器在调整大小时是否为不透明模式。
参数 false 表示在调整大小时为透明模式(即不透明模式被禁用)。
设置调整大小时不透明
Opaque Resize(不透明调整大小):
当 setOpaqueResize 被设置为 true 时(默认值),调整大小操作是立即生效的,用户拖动分割条时,子控件的大小会实时更新。这种方式称为不透明调整大小。
不透明调整大小会导致子控件在用户拖动分割条时实时调整大小,可能会在复杂界面上引起性能问题。
Transparent Resize(透明调整大小):
当 setOpaqueResize 被设置为 false 时,调整大小操作不是立即生效的,用户拖动分割条时,会有一个虚拟的分割条跟随用户的拖动,子控件的大小只在用户释放分割条时更新。这种方式称为透明调整大小。
透明调整大小可以提高复杂界面上的性能,因为子控件的大小只在拖动结束时更新。
pRightWidget->setStyleSheet("background-color:rgb(154,154,154)");
这行代码设置了 pRightWidget 的样式表,以改变其背景颜色。
pRightWidget:
pRightWidget 是一个 QWidget 对象,代表界面上的一个小部件。
setStyleSheet:
setStyleSheet(const QString &styleSheet) 是 QWidget 类的一个成员函数。
这个函数用于设置小部件的样式表(stylesheet)。
样式表是一种类似于 CSS(层叠样式表)的语言,用于定义小部件的外观和布局。
"background-color:rgb(154,154,154)":
这是一个样式表字符串,定义了小部件的背景颜色。
background-color 是 CSS 属性,用于设置背景颜色。
rgb(154,154,154) 指定了颜色的 RGB 值,其中每个值在 0 到 255 之间。
setMinimumWidth
pLeftWidget->setMinimumWidth(200); // 设置最小宽度
这行代码为 pLeftWidget 设置了最小宽度.
pLeftWidget:
pLeftWidget 是一个 QWidget 对象,代表界面上的一个小部件。
setMinimumWidth(200):
setMinimumWidth(int minw) 是 QWidget 类的一个成员函数。
这个函数设置小部件的最小宽度,以像素为单位。
参数 200 表示最小宽度为 200 像素。
setLayout
setLayout(pHLay);
这行代码设置当前小部件的布局管理器为 pHLay。
setLayout:
setLayout(QLayout *layout) 是 QWidget 类的一个成员函数。
这个函数用于设置小部件的布局管理器(layout manager)。
pHLay:
pHLay 是一个指向 QHBoxLayout 对象的指针,表示水平布局管理器。
QHBoxLayout 是 Qt 中的一种布局类,用于将小部件水平排列。
设置布局管理器
setLayout(pHLay) 这行代码将 pHLay 设置为当前小部件的布局管理器。
布局管理器负责管理小部件的尺寸和位置,根据布局策略自动调整和排列小部件。
当设置未某一种布局之后,必须删除布局之后才能设置其他的布局.
父指针
QWidget* pRightWidget = new QWidget(this);
创建Widget并且直接显示再this界面上.
QWidget* pRightWidget = new QWidget;
将代码改成这种形式新创建的Widget不会直接显示再界面上,而是要通过addWidget操作添加到其他的布局上,间接显示再界面上.
结尾
最后,感谢您阅读我的文章,希望这些内容能够对您有所启发和帮助。如果您有任何问题或想要分享您的观点,请随时在评论区留言。
同时,不要忘记订阅我的博客以获取更多有趣的内容。在未来的文章中,我将继续探讨这个话题的不同方面,为您呈现更多深度和见解。
谢谢您的支持,期待与您在下一篇文章中再次相遇!