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();

    }

实现效果如上所示

相关推荐
修电脑的猫3 分钟前
带有输入的CDS和程序调用
开发语言·lua
圈圈编码6 分钟前
悲观锁和乐观锁
java·开发语言·sql·mysql
多多*8 分钟前
基于rpc框架Dubbo实现的微服务转发实战
java·开发语言·前端·redis·职场和发展·蓝桥杯·safari
IT小码哥丶21 分钟前
华为仓颉语言初识:并发编程之同步机制(上)
java·开发语言
一抓掉一大把40 分钟前
MiniExcel模板填充Excel导出
开发语言·javascript·ecmascript
小红帽2.01 小时前
开源PHP在线客服系统源码搭建教程
开发语言·开源·php
qq_433554541 小时前
C++ list代码练习、set基础概念、set对象创建、set大小操作
开发语言·c++·list
张伯毅1 小时前
Java 类型参数 T、R 、 O 、K、V 、E 、? 区别
java·开发语言
AI+程序员在路上1 小时前
单元测试与QTestLib框架使用
开发语言·c++·单元测试
哆啦A梦15882 小时前
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/[email protected] 更换为 go-ansible/@v1.1.7
开发语言·golang·ansible