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

    }

实现效果如上所示

相关推荐
心情好的小球藻12 分钟前
Python应用进阶DAY9--类型注解Type Hinting
开发语言·python
惜.己24 分钟前
使用python读取json数据,简单的处理成元组数组
开发语言·python·测试工具·json
Y40900130 分钟前
C语言转Java语言,相同与相异之处
java·c语言·开发语言·笔记
古月-一个C++方向的小白6 小时前
C++11之lambda表达式与包装器
开发语言·c++
沐知全栈开发6 小时前
Eclipse 生成 jar 包
开发语言
杭州杭州杭州7 小时前
Python笔记
开发语言·笔记·python
tanyongxi668 小时前
C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现
开发语言·c++
阿葱(聪)9 小时前
java 在k8s中的部署流程
java·开发语言·docker·kubernetes
浮生带你学Java9 小时前
2025Java面试题及答案整理( 2025年 7 月最新版,持续更新)
java·开发语言·数据库·面试·职场和发展
斯是 陋室9 小时前
在CentOS7.9服务器上安装.NET 8.0 SDK
运维·服务器·开发语言·c++·c#·云计算·.net