QT Layout布局,隐藏其中的某些部件后,不影响原来的布局

最近在工作时,被要求,需要将布局中的某些部件隐藏后,但不能影响原来的布局。

现在记录解决方案!

一、水平布局(垂直布局一样)

ui中的布局

效果:

按钮可以任意隐藏,都不影响其中布局。

隐藏代码:

cpp 复制代码
ui->pushButton_1->hide();    // 需要使用hide()
QSizePolicy retain = ui->pushButton_1->sizePolicy();    // 获取控件的大小调整策略
retain.setRetainSizeWhenHidden(true);    // 设置控件被隐藏时,任然保持在布局中的位置大小
ui->pushButton_1->setSizePolicy(retain);    // 重新设置大小策略

需要使用到**hide()**函数。

显示代码:

cpp 复制代码
ui->pushButton_1->setHidden(false);
// 也可以  ui->pushButton_1->show();

这种是在ui布局中的

二、网格布局 GridLayout (其他布局类似)

代码中自定义控件的布局

实现效果:

将第一个,第三个,第七个按钮给隐藏掉了,但是并不影原来的布局。

布局代码:

cpp 复制代码
QGridLayout *gLayout = new QGridLayout(this);       
QList<QPushButton *> pList;                         
for (int i = 0; i < 3; i++) {                       
    for (int j = 0; j < 3; j++) {                   
        QPushButton *btn = new QPushButton(this);   
        btn->setText("我是按钮");                       
        pList.append(btn);  // 添加到链表,用于隐藏部件按钮       
        btn->hide();        // 1.需要先隐藏              
        gLayout->addWidget(btn, i, j);  // 2.再添加到布局 
    }                                               
}                                                   
// 上面被隐藏了,这里显示出来                                    
for (QPushButton *btn : pList) {                    
    btn->setHidden(false);                          
} 
                                                  
this->setLayout(gLayout);

注意,需要先隐藏控件后,再添加到布局管理器中!

为什么需要这样呢?某些场景下不这样操作,无法达到最终效果!

隐藏代码:

cpp 复制代码
pList[0]->hide();    // 需要使用hide()                        
QSizePolicy retain = pList[0]->sizePolicy(); 
retain.setRetainSizeWhenHidden(true);        
pList[0]->setSizePolicy(retain);             
// ... 其他按钮隐藏类似,修改索引即可

需要恢复显示,可以使用 setHidden 函数或者 show 函数。

完!

相关推荐
肥or胖10 小时前
【FFmpeg 快速入门】本地播放器 项目
开发语言·qt·ffmpeg·音视频
小灰灰搞电子16 小时前
Qt Quick 粒子系统详解
开发语言·qt
暴躁茹18 小时前
Qt 将触摸事件转换为鼠标事件(Qt4和Qt5及以上版本)
开发语言·qt·计算机外设
大专生学编程19 小时前
QT简介和QT环境搭建
c++·qt
feiyangqingyun19 小时前
Qt/C++开发监控GB28181系统/视频点播没有ssrc问题的处理/兼容各种设备和应用场景需求
c++·qt·gb28181
小堃学编程21 小时前
QT跨平台应用程序开发框架(10)—— Qt窗口
开发语言·qt
轩宇^_^21 小时前
Qt CMake 学习文档
数据库·qt·学习
小徐不徐说21 小时前
QT技巧之快速搭建串口收发平台
开发语言·c++·qt·串口·软件构建·个人开发·通信
天堂陌客1 天前
QT 交叉编译环境下,嵌入式设备显示字体大小和QT Creator 桌面显示不一致问题解决
开发语言·qt·字库
小堃学编程1 天前
QT跨平台应用程序开发框架(9)—— 容器类控件
开发语言·qt