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

qt QSplitter详解

1、概述

QSplitter是Qt框架中的一个布局管理器类,它允许用户在应用程序窗口中创建可拖动的分隔器,以便动态地调整多个子窗口或控件的大小。QSplitter非常适合用于分割、重新排列和管理用户界面中的多个区域,提供了一种直观且灵活的方式来控制界面布局。

2、重要方法

QSplitter类提供了多种方法来管理和控制分隔器及其子控件:

  • 构造函数

    • QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr):根据指定的方向(水平或垂直)创建一个QSplitter对象,并可选地指定一个父控件。
  • 添加和移除控件

    • void addWidget(QWidget *widget):将一个子控件添加到QSplitter中。
    • int indexOf(QWidget *widget):返回子控件在QSplitter中的索引位置。
    • void insertWidget(int index, QWidget *widget):在指定索引位置插入一个子控件。
    • void removeWidget(QWidget *widget):从QSplitter中移除一个子控件。
  • 设置和获取属性

    • void setOrientation(Qt::Orientation orientation):设置QSplitter的方向为水平或垂直。
    • Qt::Orientation orientation() const:获取QSplitter的当前方向。
    • void setOpaqueResize(bool opaque):设置分隔器在调整大小时是否显示为不透明的样式。
    • bool isOpaqueResize() const:检查分隔器在调整大小时是否显示为不透明。
    • void setSizes(const QList<int> &sizes):设置子控件的初始大小。
    • QList<int> sizes() const:获取当前子控件的大小。
    • int handleWidth() const:获取分隔器的宽度。
    • void setCollapsible(int index, bool collapsible):设置指定索引位置的子控件是否可以折叠。
    • bool isCollapsible(int index) const:检查指定索引位置的子控件是否可以折叠。
  • 布局和刷新

    • void refresh():重新布局和绘制分隔器及其子控件。

3、重要信号

  • splitterMoved(int pos,int index):当分割条被移动时发射
#include <QApplication>  
#include <QSplitter>  
#include <QTextEdit>  
#include <QFrame>  
#include <QHBoxLayout>  
#include <QWidget>  
  
int main(int argc, char *argv[]) {  
    QApplication app(argc, argv);  
  
    // 创建一个主窗口  
    QWidget mainWindow;  
    mainWindow.setWindowTitle("QSplitter Example");  
    mainWindow.setFixedSize(800, 600);  
  
    // 创建一个水平布局  
    QHBoxLayout *layout = new QHBoxLayout(&mainWindow);  
  
    // 创建一个水平方向的QSplitter  
    QSplitter *horizontalSplitter = new QSplitter(Qt::Horizontal);  
  
    // 设置子控件的初始大小  
    horizontalSplitter->setSizes(QList<int>() << 100 << 200 << 300);  
  
    // 创建并添加子控件到水平QSplitter中  
    QFrame *leftFrame = new QFrame();  
    leftFrame->setStyleSheet("QFrame{background-color:rgb(255, 0, 0)}");  
    leftFrame->setMinimumWidth(100);  
    horizontalSplitter->addWidget(leftFrame);  
  
    QTextEdit *textEdit = new QTextEdit();  
    horizontalSplitter->addWidget(textEdit);  
  
    QSplitter *verticalSplitter = new QSplitter(Qt::Vertical);  
    verticalSplitter->setOpaqueResize(false);  
  
    QFrame *topRightFrame = new QFrame();  
    topRightFrame->setStyleSheet("QFrame{background-color:rgb(0, 255, 0)}");  
    verticalSplitter->addWidget(topRightFrame);  
  
    QTextEdit *bottomRightTextEdit = new QTextEdit();  
    verticalSplitter->addWidget(bottomRightTextEdit);  
  
    // 将垂直QSplitter添加到水平QSplitter中  
    horizontalSplitter->addWidget(verticalSplitter);  
  
    // 将水平QSplitter添加到主布局中  
    layout->addWidget(horizontalSplitter);  
  
    // 设置主窗口的布局  
    mainWindow.setLayout(layout);  
  
    // 显示主窗口  
    mainWindow.show();  
  
    return app.exec();  
}

觉得有帮助的话,打赏一下呗。。

           


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

相关文章:

  • 新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大
  • Cloud Native Spring in Action
  • 关于git命令
  • 为什么我们调用 start()方法时会执行 run()方法 ,为什么我们不能 直接调用 run()方法?
  • Oracle OCP认证考试考点详解082系列11
  • Linux和,FreeRTOS 任务调度原理,r0-r15寄存器,以及移植freertos(一)
  • MySQL 索引的底层实现原理与优化策略
  • python 爬虫0基础入门 (爬虫基础知识)
  • 深度学习中的迁移学习
  • 使用Kafka构建大规模消息传递系统
  • SpringBoot+Shirp的权限管理
  • 云专线优势有哪些?对接入网络有什么要求?
  • Vue3 keep-alive核心源码的解析
  • C++ | Leetcode C++题解之第537题复数乘法
  • 麦麦Docker笔记(一)
  • masm汇编字符输入输出演示
  • 数字身份发展趋势前瞻:去中心化身份
  • OpenCV图像预处理1
  • RuleAlign 规则对齐框架:将医生的诊断规则形式化并注入模型,无需额外人工标注的自动对齐方法
  • Vue Composition API 有哪些常用的 API?
  • CentOS 磁盘扩容
  • 浅谈串口服务器的作用
  • 非线性数据结构之图
  • ICT网络赛道安全考点知识总结5
  • 低代码架构浅析
  • 第七篇: BigQuery中的复杂SQL查询