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
    #include "LayersFrameList.h"

    #include
    #include

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

    }

实现效果如上所示

相关推荐
guodingdingh1 小时前
软件开发工作问题总结0718
java·开发语言·数据库
优橙教育3 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
SeaTunnel5 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影5 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code6 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121316 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
CRMEB系统商城7 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience8 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao8 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
爱喝水的鱼丶9 小时前
SAP-ABAP:ALV通用封装实践——搭建可复用的ALV开发工具类,减少80%重复代码
开发语言·性能优化·sap·abap·erp·alv