【十五】【QT开发应用】水平分裂器和竖直分裂器,setLayout,setOpaqueResize,setMinimumWidth

水平分裂器和竖直分裂器是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操作添加到其他的布局上,间接显示再界面上.

结尾

最后,感谢您阅读我的文章,希望这些内容能够对您有所启发和帮助。如果您有任何问题或想要分享您的观点,请随时在评论区留言。
同时,不要忘记订阅我的博客以获取更多有趣的内容。在未来的文章中,我将继续探讨这个话题的不同方面,为您呈现更多深度和见解。
谢谢您的支持,期待与您在下一篇文章中再次相遇!

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妖精七七_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值