QT之可拖动布局研究

1. 背景

最开始只用到了最基本的水平布局 、垂直布局。它的好处就是窗口整体缩放后,控件也自动等比例缩放。 但是比如水平布局之中的控件宽度比例、垂直布局之中的控件高度比例都是固定的。

平时也不怎么开发界面,最近有个需求,想界面上的控件布局满足以下:

1)窗口整体缩放后,控件也自动等比例缩放。

2)与很多商业化软件或者很多IDE一样,控件支持鼠标拖动调节大小。比如vs中的很多窗口可以拖动来控制它们大小。

环境:vs2019 + Qt 5.15.2

2. 探索

先是在GPT上找答案,搞了一会发现说的不行,搞烦了。最后还是在其他地方查了查资料,自己做了测试,最终汇总整理如下。

界面设计不是特别复杂,所以直接在QT Designer中进行。

如图所示,有6个控件元素,

  • 其中1(label)、2(listView)组成一个垂直布局 verticalLayout_2
  • 其中4(label)、5(tableView)组成一个垂直布局 verticalLayout
  • 然后3(tabWidget)、verticalLayout组成 水平分割布局local_H_splitter
  • 然后6(plainTextEdit)、local_H_splitter组成垂直分割布局local_V_splitter
  • 最后垂直布局 verticalLayout_2、local_V_splitter 组成全局的一个水平分割布局global_H_splitter,见下图:
  • 最终对整个窗体设置为栅格布局。

现在启动程序,确实是可以自由拖动调节控件大小了。

但还有个问题,控件大小的初始比例并不理想,想要一个设定的初始比例,见下文。

3. 如何设置QSplitter中控件的初始显示比例

复制代码
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    this->setWindowTitle("Resizable Layout Example");

    ui.local_H_splitter->setSizes(QList<int>() << 400 << 100 ); // 4:1
    ui.local_H_splitter->widget(0)->setMinimumSize(100, 100); // 分割布局中元素最小尺寸,貌似不起作用
    ui.local_H_splitter->widget(1)->setMinimumSize(100, 100);
  
    ui.local_V_splitter->setSizes(QList<int>() << 700 << 100); // 7:1
    ui.local_V_splitter->widget(0)->setMinimumSize(100, 100);
    ui.local_V_splitter->widget(1)->setMinimumSize(100, 100);

    ui.global_H_splitter->setSizes(QList<int>() << 100 << 700); // 1:7
    ui.global_H_splitter->widget(0)->setMinimumSize(100, 100);
    ui.global_H_splitter->widget(1)->setMinimumSize(100, 100);
    
}

如此,便能设置QSplitter中控件的初始显示比例。

相关推荐
weixin_307779133 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
2601_966949653 小时前
为什么量化回测中 for 循环比 DataFrame 慢三个数量级?从向量化原理讲起
开发语言·python·pandas·股票数据·quantdash
边境悍匪4 小时前
蜗牛学苑 Java 智能体学习 Day45|Knife4j+SpringBoot3、书城项目整合 MyBatis 思维导图复盘
java·开发语言·vue.js·学习·spring
我的xiaodoujiao4 小时前
Django 基础知识详细图文教程 9-Django 模板引擎 2
开发语言·数据库·后端·django
菜鸟~noob2334 小时前
【太空电子战】从CCS到Meadowlands:反通信系统的二十年演进史【含matlab代码】
开发语言·matlab
江湖人称菠萝包5 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter10-Data Visualization
笔记·qt·qt5
quantdash_cc5 小时前
量化策略为什么需要实时行情数据?从信号产生到交易决策的时间差说起
开发语言·python·数据分析·量化交易·股票数据·quantdash
逆向编程7 小时前
QGIS地图投影(CRS坐标参照系)设置
开发语言
free-elcmacom7 小时前
发际线警告!手撕《C陷阱与缺陷》终极 BOSS:signal 函数与 typedef 魔法
c语言·开发语言·visual studio code·visual studio
程序员阿鹏7 小时前
简单介绍一下软引用
java·开发语言·jvm·数据结构·后端