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

Qt6之QListWidget——Qt仿ToDesk侧边栏(1)

一、 QLitWidget概述

注意:本文不是简单翻译Qt文档或者接口函数,而侧重于无代码Qt设计器下演示使用。

QListWidget也称列表框类,它提供了一个类似于QListView提供的列表视图,但是它具有一个用于添加和删除项的经典的基于项的接口。在实际应用中,多与堆栈窗体类配合使用。

它是Qt这些常用基础组件里,我认为最被低估的类,其实QListWidget反到灵活、简单、实用,包括我自己在侧栏或者上栏,也经常使用了QFrame+QPushButton或者QToolButton组合拼接起来自己“造轮子”,如下图卡巴和微信的侧栏列表框样式以及本文演示重点todesk侧边栏:

大部分不熟悉的人,潜意识里都觉得QListWidget太低级不好用只配实现下图左的效果,本次我们按照ToDesk已有布局实现如下右图效果,只用qt designer设计器和样式表且不使用一行代码:

 二、实例演示和试用

2.1、拖出列表框类并添加列表

如下图,在Item Widget栏里1位置,直接拖拽出List Widget,会得到2位置所示的白框,看这什么也没有那是因为没有列表菜单,双击2位置空间,在3位置点绿色添加按钮,在输入名称就可显示了,依次增加5个得到下右图所示;

 2.2、对QListWidget设置背景去除边框

QListWidget选中右键,改变样式表,输入以下内容,得到下右图所示:

QListWidget {background-color: rgb(240, 243, 248);border: 0;
}

 2.3、调整字体大小

将所有列表菜单字体,一次性全部字体大小调成12;

QListWidget选中,最右边窗口font,12,确认即可,得到右图;

2.4、调整每个列表菜单高度

解决每个列表菜单高度,也叫Item高度。

此时每个按钮菜单已经可以点击或者选中了,但是按钮高度太低,导致都挤在了上面,改变item高度,还有每个按钮圆角,我一般还是习惯样式表,如下图:

QListView::item {height: 45px;border-radius: 5px;
}

 2.5、设置鼠标划过和选中效果

依旧是选中,编辑样式表:其中background背景颜色,color字体颜色。设置完成后如右图:

 QListView::Item:hover {background: rgb(229, 237, 248);}QListView::Item:selected  {background: rgb(204, 223, 248);color: rgb(0, 112, 249);
}

 2.6、解决左侧图标

2.6.1 项目,右键,新建文件,选择“Qt resource file”,随便一个英文名,后期会被视为路径,建议resource,此时得到右图,在qrc文件位置,添加现有文件,把准备好的图标一把添加。

备注:每个菜单有两个图标,是因为选中后图标是蓝色,所以是两个

2.6.2 选中,右键,编辑项目,再选择属性,滚动找到icon,点小三角形,再点选择资源,找到第一个control对应黑色图标;紧接着,滚动到“选择 关”位置,同样点小三角形,再点选择资源,找到第一个control对应蓝色图标,确认即可。

 

 

 2.6.3 按照上面的方面,把5个列表,依次设置图标,完成后,如下图,会看到图标特别小,我们需要根据图标大小,设置一下,在如下箭头所示位置,iconsize的宽度和高度都设置为30,得到下右图,已经接近完美了;

 2.7、解决选中后的虚线框问题

 这里也采用样式表去除,选中列表框整体,右键,改变样式表,增加如下,如下图:

QWidget:focus{
outline: none;
}

2.8 最终编译演示

此时已经,完整完成,侧边栏,如下图,下篇将演示和堆栈窗体类QStackedWidget结合起来,实现翻页切换功能:

 总结,实际上Qt提供给我们的是小孩积木,到底堆成怎样效果,取决于想象力和熟练度。下篇将QStackedWidget很容易的实现切换页,相对于QFrame+QPushButton或者QToolButton这种造轮子组和,更加简洁、实用和易理解。

http://www.lryc.cn/news/115120.html

相关文章:

  • Prometheus技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》
  • Android 数据库之GreenDAO
  • kotlin 编写一个简单的天气预报app(六)使用recyclerView显示forecast内容
  • jpa Page 1 of 0 containing UNKNOWN instances错误关于like问题的解决记录
  • Python实战之使用Python进行数据挖掘详解
  • scala 加载properties文件
  • 备战秋招012(20230808)
  • QT中定时器的使用
  • 【UE4】多人联机教程(重点笔记)
  • 【go】GIN参数重复绑定报错EOF问题
  • 关于MySQL中的binlog
  • 我维护电脑的方法
  • AP51656 电流采样降压恒流驱动IC RGB PWM深度调光 LED电源驱动
  • Python爬虫的解析(学习于b站尚硅谷)
  • python的virtualenv虚拟环境无法激活activate
  • uniapp中token操作:存储、获取、失效处理。
  • 乐鑫科技 2022 笔试面试题
  • 实现UDP可靠性传输
  • Zebec Protocol 将进军尼泊尔市场,通过 Zebec Card 推动地区金融平等
  • Qt--动态链接库的创建和使用
  • 设计模式十二:享元模式(Flyweight Pattern)
  • 【LeetCode】88. 合并两个有序数组 - 双指针
  • HarmonyOS应用开发的新机遇与挑战
  • Qt中qmake、构建、运行、清理的区别
  • 【设计模式——学习笔记】23种设计模式——观察者模式Observer(原理讲解+应用场景介绍+案例介绍+Java代码实现)
  • 【奇葩瑞萨-004】RX系列单片机的GPIO初始化
  • 【Git】Git切换地址
  • elementUI点击当前行更改当前行状态(数据更新DOM不更新问题解决)
  • python爬取阿里巴巴商品页面数据api
  • angular-mat-select 多选 实现按选择顺序排序