Qt实现跟随侧边栏的按钮控制侧边栏的展开与折叠

这篇具有很好参考价值的文章主要介绍了Qt实现跟随侧边栏的按钮控制侧边栏的展开与折叠。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果展示:右侧工具栏宽度是固定的

qt 伸缩侧边栏,QT学习,qt,开发语言,ui,c++

方式概述:

一、界面布局方式如图所示:SideToolWidget主体采用水平布局,包含两个QWidget,左侧为用于信息显示的leftWidget,右侧为容纳展开折叠按钮窗口btnWidget与云台工具显示窗口ptzWidget的containerWidget,内部窗体的具体布局如图所示;
qt 伸缩侧边栏,QT学习,qt,开发语言,ui,c++
二、实现方式描述,按钮窗口btnWidget与云台工具显示窗口ptzWidget均采用宽度固定,高度自由的布局策略,容器窗口可采取宽度固定或不固定,高度自由,宽度若固定,应为按钮窗口btnWidget与云台工具显示窗口ptzWidget的宽度之和;若宽度不固定,应在布局的左侧放置一个水平弹簧用于将按钮窗口在pztWidget隐藏时挤压至最右侧;记录ptzWidget的宽度,展开折叠按钮showOrHideBtn槽函数中判断用户点击的状态,若隐藏,则containerWidget总宽度与btnWidget相同,若显示,则containerWidget宽度为btnWidget与pztWidget之和;

完整代码:其中资源图片也可自己贴图替换

头文件

#ifndef SIDETOOLWIDGET_H
#define SIDETOOLWIDGET_H

#include <QWidget>
#include <QList>

QT_BEGIN_NAMESPACE
namespace Ui { class SideToolWidget; }
QT_END_NAMESPACE

class SideToolWidget : public QWidget
{
    Q_OBJECT

public:
    SideToolWidget(QWidget *parent = nullptr);
    ~SideToolWidget();
    void initPtzStyle();
private slots:
    void on_showOrHideBtn_clicked();

private:
    Ui::SideToolWidget *ui;
    bool unfold;
    int changeWidth;
};
#endif // SIDETOOLWIDGET_H

源文件


#include "sidetoolwidget.h"
#include "ui_sidetoolwidget.h"
#include <QIcon>

const QString btnStyle = "QPushButton{border-radius:18px; background-position:center; background-color:rgba(245,245,245,250)}"\
                         "QPushButton:pressed{background-color:rgba(255,255,255,255);border-style:inset;}";

SideToolWidget::SideToolWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::SideToolWidget)
    , unfold(true)
{
    ui->setupUi(this);
    changeWidth = ui->ptzWidget->width();
    this->setWindowTitle("折叠窗口");
    initPtzStyle();
}

SideToolWidget::~SideToolWidget()
{
    delete ui;
}

void SideToolWidget::initPtzStyle()
{
    // ptzWidget中所有按钮设置统一风格
    QList<QPushButton*> btnList = ui->ptzWidget->findChildren<QPushButton *>();
    for (int i = 0; i < btnList.count(); i++) {
        btnList.at(i)->setStyleSheet(btnStyle);
        btnList.at(i)->setIconSize(QSize(20,20));
    }

    ui->topButton->setIcon(QIcon(":/prefix/image/PTZ_Top.ico"));
    ui->rightTopButton->setIcon(QIcon(":/prefix/image/PTZ_TopRight.ico"));
    ui->rightButton->setIcon(QIcon(":/prefix/image/PTZ_Right.ico"));
    ui->rightBottomButton->setIcon(QIcon(":/prefix/image/PTZ_BottomRight.ico"));
    ui->bottomButton->setIcon(QIcon(":/prefix/image/PTZ_Bottom.ico"));
    ui->bottomLeftButton->setIcon(QIcon(":/prefix/image/PTZ_BottomLeft.ico"));
    ui->leftButton->setIcon(QIcon(":/prefix/image/PTZ_Left.ico"));
    ui->topLeftButton->setIcon(QIcon(":/prefix/image/PTZ_TopLeft.ico"));
    ui->resetButton->setIcon(QIcon(":/prefix/image/PTZ_Recover.ico"));

    ui->zoomInButton->setStyleSheet(btnStyle);
    ui->zoomOutButton->setStyleSheet(btnStyle);
    ui->focusMinButton->setStyleSheet(btnStyle);
    ui->focusMaxButton->setStyleSheet(btnStyle);
    ui->flightOutButton->setStyleSheet(btnStyle);
    ui->flightInButton->setStyleSheet(btnStyle);

    ui->singleCallBtn_1->setIcon(QIcon(":/prefix/image/SingleCall.ico"));
    ui->singleDeleteBtn_1->setIcon(QIcon(":/prefix/image/SingleDelete.ico"));
    ui->singleCallBtn_2->setIcon(QIcon(":/prefix/image/SingleCall.ico"));
    ui->singleDeleteBtn_2->setIcon(QIcon(":/prefix/image/SingleDelete.ico"));
    ui->singleCallBtn_3->setIcon(QIcon(":/prefix/image/SingleCall.ico"));
    ui->singleDeleteBtn_3->setIcon(QIcon(":/prefix/image/SingleDelete.ico"));
    ui->singleCallBtn_4->setIcon(QIcon(":/prefix/image/SingleCall.ico"));
    ui->singleDeleteBtn_4->setIcon(QIcon(":/prefix/image/SingleDelete.ico"));
    ui->singleCallBtn_5->setIcon(QIcon(":/prefix/image/SingleCall.ico"));
    ui->singleDeleteBtn_5->setIcon(QIcon(":/prefix/image/SingleDelete.ico"));
}

void SideToolWidget::on_showOrHideBtn_clicked()
{
    if (unfold) {
        ui->ptzWidget->hide();
        ui->showOrHideBtn->setText("<<");
        ui->containerWdget->setFixedWidth(ui->btnWidget->width()); 
        unfold = false;
    } else {
        ui->ptzWidget->show();
        ui->showOrHideBtn->setText(">>");
        ui->containerWdget->setFixedWidth(ui->btnWidget->width() + changeWidth);
        unfold = true;
    }
}

完整代码及资源文件下载链接

https://download.csdn.net/download/qq_44896246/87212584?spm=1001.2014.3001.5503文章来源地址https://www.toymoban.com/news/detail-515802.html

到了这里,关于Qt实现跟随侧边栏的按钮控制侧边栏的展开与折叠的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • el-tree通过default-expand-all动态控制展开/折叠

    1、如下图通过勾选框动态控制展开/折叠,全选/清空 2、实现方式如下:定义key,监听checked2修改treeKey,重新渲染tere;附加全选和清空。

    2024年02月12日
    浏览(26)
  • vue实现折叠展开收缩动画

    vue项目列表折叠面板动画效果实现 element-ui之el-collapse-transition(折叠展开动画)源码解析学习 以下代码注意两点 trainsition是需要有两个值,才能产生过渡动画的,所以一开始就需要获取到box1的高度(通过scrollHeight去获取它的高度) box1收缩,其实就是把它的height改为0,超出

    2024年02月09日
    浏览(26)
  • vue + element ui 实现侧边栏导航栏折叠收起

    首页布局如下 要求点击按钮,将侧边栏收缩, 通过 row 和 col 组件,并通过 col 组件的 span 属性我们就可以自由地组合布局。 侧边栏代码  效果 补充路由:    

    2024年02月11日
    浏览(30)
  • vue折叠展开transition动画使用keyframes实现

    需求,我正常的菜单功能有隐藏与显示功能,需要增加动画 打开的时候宽度从0到300,关闭的时候,宽度从300到0

    2024年01月25日
    浏览(37)
  • vue+el-table实现展开与折叠

    本文会提到两种实现方法,之前我使用的是第一种,后来加了固定列,发现展开与折叠失效,故而出现了第二种方法。 一、通过class名称获取节点,并对节点进行操作(该方法表格添加固定列会失效) 1.全部展开 2.全部折叠 二、通过el-table中的 toggleRowSelection方法来实现展开与

    2024年02月14日
    浏览(31)
  • 在Qt中通过控制按钮实现登录界面密码与明码的转换

    首先,在Qt设计师界面界面上创建QLineEdit类文本框,用于输入密码,并且实现密码与明码相互转化。 默认情况下,输入密码的文本框应该是可见的并允许用户输入。 在界面上添加一个按钮,用于触发切换操作。这个按钮可以是一个简单的开关按钮,比如一个复选框或者一个切

    2024年01月21日
    浏览(43)
  • django bootstrap html实现左右布局,带折叠按钮,左侧可折叠隐藏

         在django项目中,需要使用bootstrap 实现一个左右分布的布局,左侧区域可以折叠隐藏起来,使得右侧的显示区域变大。(为了区分区域,左右加了配色,不好看的修改颜色即可)  点击折叠按钮,左侧区域隐藏,右侧区域铺满:          1、使用col-md属性,让左右两个区

    2024年02月14日
    浏览(35)
  • el-table表单一键展开折叠,展开部分后一键全部展开或折叠

    实现功能: 1.表单一键展开或者一键折叠 2.表单点击展开一部分后,再次点击展开或折叠按钮可以全部展开或全部折叠 3.完整代码在最后 1.ref=\\\"table\\\",用节点绑定的方式实现 2.data:树形结构数据 3.:tree-props=\\\"{ children: \\\'child\\\', hasChildren: \\\'hasChildren\\\' }\\\",中的children就是自动判断data中

    2024年02月11日
    浏览(32)
  • 简单实用折叠面板可以折叠收起展开内容区域

    前端简单实用折叠面板可以折叠收起展开内容区域, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下:       代码如下:  # 简单实用折叠面板可以折叠收起展开内容区域。 #### 使用方法 ```使用方法 !-- leftText:做标题  rigText: 有注明文字 isOpen:展开折叠状态

    2024年02月08日
    浏览(67)
  • element UI中table操作栏更多按钮展示与折叠的实现

    1、然后给大家看下动态图 2、解决思路: ​ 一开始我的第一反应就是可以手写一个定位布局来点击弹出更多按钮弹框,后面看了下elementUI文档上有个组件可以利用,那就是 Popover 弹出框 废话不多说,直接上代码吧 html代码块: 最后做出来的效果图如下:

    2024年02月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包