使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析

这篇具有很好参考价值的文章主要介绍了使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


原文链接:https://blog.csdn.net/qq153471503/article/details/128528072

Demo下载:https://gitee.com/jhuangBTT/QtSideBar
使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析
1、简介
侧边栏是一个很常用的导航控件,如Qt Creator软件本身也使用到了侧边栏:

使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析
目前使用Qt做出这种侧边导航栏,常见的做法是使用QListWidget加QStackedWidget,但是使用QListWidget做侧边的这个导航很不灵活,想要复刻出和Qt Creator这个侧边栏同样的效果很费劲,所以本篇博客采用QToolButton加QStackedWidget形式,在用QSS进行美化以达到效果。

2、侧边栏控件组成
Qt Creator的侧边栏是图标加文字的形式,并且文字在图标下方,首先想到的就是QToolButton。

侧边栏默认背景颜色为灰色,选项按下后背景色变为浅灰色,且选项左侧有一个加粗显示:
使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析
当鼠标悬停在选项上时,背景变为深灰色:
使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析
以上效果可以通过QSS实现。

3、UI布局
界面拖入一个QWidget并将名称设置为sideBar,将三个QToolButton拖入sideBar中,并将sideBar设置为栅格布局,界面右侧拖入一个QStackedWidget,并将整体设置为栅格布局,布局结构如下:

注意:QStackedWidget控件拖入布局后,默认存在两个page,需要手动删除。

使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析
sideBar的styleSheet为:

QWidget{
	background-color: rgb(228, 228, 228);  /* 设置背景色为灰色 */
}

给QToolButton设置上图标、设置文字显示在图标下方、使能QToolButton的checked、使能互斥点击:
使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析
autoExclusive:当一个父类窗口下存在多个QToolButton时,如果autoExclusive设置为true,可以实现单选效果。

styleSheet设置如下:

/* 默认 */
QToolButton{   
	border-top: 3px outset transparent;           /* 上边框宽度3像素、突出显示、颜色为透明 */
	border-bottom: 7px outset transparent;
	border-right: 3px outset transparent;
	border-left: 3px outset transparent;
    min-width: 80px;                            /* 控件最小宽度 */
    min-height: 80px;
	background-color: rgb(228, 228, 228);
}

/* 鼠标悬停 */
QToolButton:hover{
	background-color: rgb(205, 205, 205);
}

/* 点击和按下 */
QToolButton:pressed,QToolButton:checked{
	border-left: 3px outset rgb(93, 95, 97);  /* 左边框宽度3像素、突出显示、颜色为深深灰 */
	background-color: rgb(246, 246, 246);	
}

QPushButton:default {
    border-color: navy; /* make the default button prominent */
}

最后,将布局的边距都设为0:
使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析
使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析
创建三个UI界面,同样的操作,将布局整体进行栅格布局,并将边距设置为0:
使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析
4、代码实现界面的切换
到目前为止,其实大部分功能都已经完成了,只需要将QToolButton的checked信号和QStackedWidget的页面切换槽函数setCurrentIndex连接起来即可。

首先将需要显示的三个界面添加进QStackedWidget:

    ui->stackedWidget->addWidget(&userWnd);       // 此时userWnd界面的index为0
    ui->stackedWidget->addWidget(&permissionWnd);  // permissionWnd界面的index为1
    ui->stackedWidget->addWidget(&settingsWnd);  // settingsWnd界面的index为2

为了方便组织管理,可以将这三个QToolButton使用QButtonGroup进行管理,并给每个QToolButton设置一个ID,这个ID用来对应stackedWidget的页面index。注意QButtonGroup同样存在setExclusive方法,并且默认为true。

    btnGroup.addButton(ui->btnUser, 0);
    btnGroup.addButton(ui->btnPermission, 1);
    btnGroup.addButton(ui->btnSettings, 2);
    connect(&btnGroup, QOverload<int>::of(&QButtonGroup::buttonClicked), ui->stackedWidget, &QStackedWidget::setCurrentIndex);

最后再设置一下默认的显示界面:

    // 设置默认选中的页面
    btnGroup.button(0)->setChecked(true);
    ui->stackedWidget->setCurrentIndex(0);

到此完成!

参考链接:

【C++/QT】QT实现侧边导航栏(附代码)

QT 实现自定义树状导航栏

qt实现侧边导航栏_UI设计干货分享:设计语言 - 侧边导航栏/分页

Qt 性能优化:CPU占有率高的现象和解决办法文章来源地址https://www.toymoban.com/news/detail-426635.html

到了这里,关于使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • QT常用控件 ——QStackedWidget控件

    QStackedWidget继承自QFrame。 QStackedWidget类提供了多页面切换的布局,一次只能看到一个界面。 QStackedWidget可用于创建类似于QTabWidget提供的用户界面。 💚💚💚先来看看QTabWidget控件的效果:   需要注意的是 : QTabWidget的 currentTabText 用于修改名称 。在 插入页 中插入新的界面。

    2024年02月08日
    浏览(80)
  • 通俗易懂玩QT:QStackedWidget 学习

    业务需求,用到了 QStackWidget 这个类,然后程序存在很严重的内存泄露问题,所以特意研究了一下 QStackWidget 类,QStackWidget 类的功能是窗体切换,它比 QTabWidget 使用起来更为灵活,QStackWidget 类的窗体切换需要自己用 connect 来关联,同时也可以使用事件来触发。 下面简单说一下

    2024年02月10日
    浏览(39)
  • QT-QStackedWidget多窗口应用

    前言: 多窗口应用,例如某微信,页面由1,2,3个布局组成。 1-基本流程    页面1控制页面2,通过选择页面1上的按钮或控件    页面2控制页面3,通过选择页面2上的按钮或控件 2-其中页面2中的页面很多是不同的,页面3也同理,那其实就是在同一个区域显示不同页面。 3-那

    2024年02月01日
    浏览(32)
  • Linux 实现鼠标侧边键实现代码与网页的前进、后退

    之前一直是使用windows进行开发,最近转到linux后使用VsCode编写代码。 但是不像在win环境下,使用鼠标侧边键可以实现代码的前向、后向跳转。浏览网页时也不行(使用 Alt + Left 可以后退)。 修改键盘映射实在没有那么方便,所以要想点儿招解决这个问题。 经过一番查找,

    2024年02月11日
    浏览(49)
  • Flutter 自定义实现时间轴、侧边进度条

    时间轴和侧边进度条是非常常见的 UI 控件,它们可以增强应用的视觉效果和交互体验。在这篇文章中,我们将详细介绍如何使用 Flutter 自定义实现这两个控件。 时间轴是一个用于显示时间或进度的控件,通常在一些时间线上用于展示事件的发生顺序。以下是实现时间轴的步

    2024年02月10日
    浏览(34)
  • 【QT】多层QTreeWidget与QStackedWidget的关联操作

    通过点击多层QTreeWidget来控制QStackedWidget中的page页面切换 treeWidget设计 treeWidget设计: 关联 选择 on_treeWidget_itemClicked() 函数 重点是使用 setCurrentWidget() 和 判断语句 完整语句:

    2024年01月17日
    浏览(40)
  • Qt 侧边栏隐藏和滑出 最简单实现

    源码链接:https://github.com/KunMengcode/CPP-QT-Example/tree/main/Sidebar_Hide

    2024年02月15日
    浏览(34)
  • element ui NavMenu 实现侧边栏导航菜单

      根据v-for遍历菜单参数,渲染导航栏。 使用Element UI 的 Container 布局容器和NavMenu导航菜单组件,使用router-view存放二级路由出口。 html: js: router/index.js:  配置路由  

    2024年02月08日
    浏览(39)
  • Qt应用开发(基础篇)——工具按钮类 QToolButton

            QToolButton 类继承于 QAbstractButton ,该部件为命令或选项提供了一个快速访问按钮,通常用于 QToolBar 中。         按钮基类 QAbstractButton          QToolButton 是一个特殊的按钮,一般显示文本,只显示图标,结合toolBar使用。它提供对特定命令或选项的快速访问,

    2024年02月09日
    浏览(56)
  • element ui实现动态侧边菜单栏以及页面布局

    一、实现效果 这里以学生成绩管理系统为例,整体布局以及实现效果如下所示:  二、整体布局   整体布局采用elementui 中Container 布局容器组件实现,如下所示。   整个页面布局页面为main.vue,其中左侧菜单栏部分被封装为一个组件( MenuTree),菜单部分使用elementui 中Men

    2024年02月11日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包