当前位置: 首页 > article >正文

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

实现效果如上所示


http://www.kler.cn/a/427837.html

相关文章:

  • Debian 10 中 Linux 4.19 内核在 x86_64 架构上对中断嵌套的支持情况
  • 【环境搭建】1.1源码下载与同步
  • 深度解析:网站快速收录与服务器性能的关系
  • 数据分析系列--④RapidMiner进行关联分析(案例)
  • QT简单实现验证码(字符)
  • 使用 OpenResty 构建高效的动态图片水印代理服务20250127
  • [Python | CS基础 ]Python多线程`threading`和多进程`multiprocessing`
  • 相机动态/在线标定
  • 【深度学习】分类问题代码实战之初始手写数据集
  • Qt复习学习
  • ASP.NET Core SignalR 入门
  • FastAPI中创建一个多App架构
  • 超详细!关于在Docker里安装Hadoop的详细操作(部署单点集群)
  • Python 中的魔法方法有哪些?
  • el-table expand-row-keys默认展开,数据更新后默认展开的问题
  • 如何使用apache部署若依前后端分离项目
  • AWS Fargate + Cloud Map + Prometheus 实现 JVM 监控方案详解
  • 控制访问权限
  • 【QT】一个简单的串口通信小工具(QSerialPort实现)
  • C/C++基础知识复习(40)
  • 响应式布局:登录界面
  • Qt Window应用程序去掉控制台窗口
  • K8S对接ceph的RBD块存储
  • 在Ubuntu-22.04 [WSL2]中配置Docker
  • go get依赖包失败,502 Bad gateway
  • C++ String(字符串)和 int(整数) 互转