• Qt QSplitter拆分器


    1.简介

    QSplitter拆分器允许用户通过拖动子部件之间的边界来控制它们的大小。

    单个拆分器可以控制任意数量的小部件。QSplitter的典型用法是创建几个小部件,并使用insertWidget()或addWidget()添加它们。

    2.常用方法

    void addWidget(QWidget *widget)添加widget
    int count() const返回拆分器布局中包含的小部件数量。
    void setOrientation(Qt::Orientation)设置方向,水平,垂直,默认水平的
    void setStretchFactor(int index, int stretch)设置伸缩系数
    void insertWidget(int index, QWidget *widget)插入widget

    默认情况下,QSplitter会动态调整其子元素的大小。如果您希望QSplitter仅在调整大小操作结束时调整子元素的大小, 那么调用setOpaqueResize(false)。

    1. void setOpaqueResize(bool opaque = true)

    将子部件的各自大小设置为列表中给定的值。

    如果splitter是水平的,则这些值将以像素为单位设置每个小部件的宽度,从左到右。

    如果splitter是垂直的,则从上到下设置每个小部件的高度

    1. void setSizes(const QList<int> &list)

    3.示例

    3.1伸缩系数

    添加3个QPlainTextEdit,默认水平方式添加的,并且设置了伸缩系数,我个人理解,伸缩系数,好比,比例系数。上图比例为 2:1:1。

    源码:

    1. QSplitter *s1 = new QSplitter(this);
    2. ui->verticalLayout->addWidget(s1);
    3. //添加3个widget
    4. QPlainTextEdit *t1 = new QPlainTextEdit(s1);
    5. t1->setPlaceholderText("t1");
    6. QPlainTextEdit *t2 = new QPlainTextEdit(s1);
    7. t2->setPlaceholderText("t2");
    8. QPlainTextEdit *t3 = new QPlainTextEdit(s1);
    9. t3->setPlaceholderText("t3");
    10. s1->addWidget(t1);
    11. s1->addWidget(t2);
    12. s1->addWidget(t3);
    13. s1->setStretchFactor(0,2);
    14. s1->setStretchFactor(1,1);
    15. s1->setStretchFactor(2,1);

    3.2 setOpaqueResize(false)效果

    默认为true,效果如下

    3.3QSplitter相互嵌套

    源码:

    1. QSplitter *mainSplitter = new QSplitter(this);
    2. ui->verticalLayout->addWidget(mainSplitter);
    3. QSplitter *rightSplitter = new QSplitter(mainSplitter);
    4. rightSplitter->setOrientation(Qt::Vertical); //设置垂直方向
    5. //添加3个widget
    6. QPlainTextEdit *t1 = new QPlainTextEdit(mainSplitter);
    7. t1->setPlaceholderText("t1");
    8. QPlainTextEdit *t2 = new QPlainTextEdit(rightSplitter);
    9. t2->setPlaceholderText("t2");
    10. QPlainTextEdit *t3 = new QPlainTextEdit(rightSplitter);
    11. t3->setPlaceholderText("t3");
    12. rightSplitter->addWidget(t2);
    13. rightSplitter->addWidget(t3);
    14. mainSplitter->addWidget(t1);
    15. mainSplitter->addWidget(rightSplitter);

  • 相关阅读:
    七个步骤 从零到servlet第一个hello
    在SQL中:如何使用命令创建、修改、添加数据库
    干货 | 利用 pytest 玩转数据驱动测试框架
    电磁波谱下的世界
    uni-app 之 文字分两行显示超出用省略号表示
    mysql分区表的增删改查操作
    Node.js之path路径模块
    ubuntu20编译安装pkg-config
    JavaScript --Set对象及常用方法总结
    Floyd (弗洛伊德)算法简述
  • 原文地址:https://blog.csdn.net/wzz953200463/article/details/125546560