QT 左右 上下,拉伸 分配窗口大小

要的效果是以下:

QT C++ 两个QWideget A B现在有放在一个窗口QWideget Test内,初始比例要2:8 ,现在我要 A B 两个窗口中间 当鼠标移到他中间时,有条线,可以左右移动来控件 A B 窗口所占的大小widgetB (有 widgetC widgetD)又分为两个区域,可以上下拖动 初始上下比例也是1:9

要实现一个嵌套的分割窗口,其中widgetB包含widgetCwidgetD,并且可以上下拖动以调整它们的大小比例,初始比例为1:9,您可以使用两个QSplitter控件:一个用于主窗口的左右分割,另一个用于widgetB的上下分割。

以下是实现这一功能的步骤和示例代码:

  1. 创建主窗口和主QSplitter : 在主窗口中创建一个QSplitter实例,并设置其方向为水平。

  2. 添加QWidget A和B到主QSplitter : 将widgetAwidgetB添加到主QSplitter中,并设置初始大小比例。

  3. 创建widgetB的QSplitter : 在widgetB内部创建另一个QSplitter实例,并设置其方向为垂直。

  4. 添加widgetC和D到widgetB的QSplitter : 将widgetCwidgetD添加到widgetBQSplitter中,并设置初始大小比例。

  5. 设置初始比例 : 使用QSplittersetSizes方法来设置widgetAwidgetB的初始大小比例,以及widgetCwidgetD的初始大小比例。

    #include "mainwindow.h"

    #include <QApplication>
    #include "LayersFrameList.h"

    #include <qDebug>
    #include <QSplitter>

    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    MainWindow w;

    {
    // 创建主窗口
    QWidget *mainWidget = new QWidget;
    mainWidget->resize(800, 600);

    复制代码
             // 创建主QSplitter,水平方向
             QSplitter *mainSplitter = new QSplitter(Qt::Horizontal, mainWidget);
    
             // 创建widgetA和widgetB
             QWidget *widgetA = new QWidget;
             widgetA->setStyleSheet("background-color: lightblue;");
             QWidget *widgetB = new QWidget;
             widgetB->setStyleSheet("background-color: lightgrey;");
    
             // 将widgetA和widgetB添加到主QSplitter中
             mainSplitter->addWidget(widgetA);
             mainSplitter->addWidget(widgetB);
    
             // 设置widgetA和widgetB的初始大小比例
             QList<int> mainSizes;
             mainSizes << mainWidget->width() * 0.2 << mainWidget->width() * 0.8;
             mainSplitter->setSizes(mainSizes);
    
             // 创建widgetB的QSplitter,垂直方向
             QSplitter *subSplitter = new QSplitter(Qt::Vertical, widgetB);
    
             // 创建widgetC和widgetD
             QWidget *widgetC = new QWidget;
             widgetC->setStyleSheet("background-color: lightgreen;");
             QWidget *widgetD = new QWidget;
             widgetD->setStyleSheet("background-color: pink;");
    
             // 将widgetC和widgetD添加到widgetB的QSplitter中
             subSplitter->addWidget(widgetC);
             subSplitter->addWidget(widgetD);
    
             // 设置widgetC和widgetD的初始大小比例
             QList<int> subSizes;
             subSizes << widgetB->height() * 0.1 << widgetB->height() * 0.9;
             subSplitter->setSizes(subSizes);
    
             // 设置widgetB的布局,并添加subSplitter
             QVBoxLayout *layoutB = new QVBoxLayout(widgetB);
             layoutB->addWidget(subSplitter);
    
             // 设置主窗口的布局,并添加mainSplitter
             QVBoxLayout *mainLayout = new QVBoxLayout(mainWidget);
             mainLayout->addWidget(mainSplitter);
    
             // 显示主窗口
             mainWidget->show();
     }
    
     w.show();
     return a.exec();

    }

实现效果如上所示

相关推荐
qingfeng1541520 小时前
企业微信多账号协同管理方案:矩阵如何统一管理?
开发语言·python·自动化·企业微信
小短腿的代码世界20 小时前
Qt属性系统揭秘:从Q_PROPERTY宏到动态元对象系统的完整架构解析
开发语言·qt·架构
江屿风20 小时前
【C++笔记】内存管理流食般投喂
开发语言·c++·笔记
林夕0720 小时前
Qt QML与C++混合编程实战指南
java·开发语言·数据库
csbysj202020 小时前
状态模式:软件设计模式的深度解析
开发语言
进击的荆棘20 小时前
优选算法——字符串
开发语言·c++·算法·leetcode·字符串
山栀shanzhi20 小时前
长连接、短连接、心跳、断线重连
开发语言·网络·c++
Kiling_070420 小时前
Java Map集合详解与实战
java·开发语言·python·算法
SilentSamsara20 小时前
描述符协议:@property 与 @classmethod 的实现原理
开发语言·python·青少年编程
绝顶少年20 小时前
[特殊字符] curl_cffi vs requests:Python请求库的终极对决
开发语言·python