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

实现效果如上所示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值