• 38889阅读
  • 47回复

自定义树形结构导航栏 [复制链接]

上一主题 下一主题
离线sssooonnnggg
 

图酷模式  只看楼主 正序阅读 楼主  发表于: 2015-01-26
应网友 @heartlessjun 要求,将项目中实现的树形结构导航栏的源码剥离出来,与各位分享。

树形结构的数据通过读取xml文件来获取,xml文件结构如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <root>
  3.     <layout>
  4.         <Node label="基本信息"></Node>
  5.         <Node label="密码信息" count="100"></Node>
  6.         <Node label="内置应用" collapse="0">
  7.             <Node label="短信" count="1000"></Node>
  8.             <Node label="通讯录" count="256"></Node>
  9.             <Node label="通话记录" count="20"></Node>
  10.         </Node>
  11.         <Node label="社交应用" collapse="0">
  12.             <Node label="QQ" count="231"></Node>
  13.             <Node label="微信"></Node>
  14.         </Node>
  15.         <Node label="浏览器" collapse="0">
  16.             <Node label="系统浏览器" count="99"></Node>
  17.             <Node label="UC浏览器" count="66"></Node>
  18.             <Node label="QQ浏览器" count="2"></Node>
  19.             <Node label="百度浏览器" count="123"></Node>
  20.             <Node label="猎豹浏览器" ></Node>
  21.         </Node>
  22.         <Node label="模拟仿真">
  23.         </Node>
  24.         <Node label="镜像分析">
  25.         </Node>
  26.     </layout>
  27. </root>

collapse 代表父节点初始化时是否展开, count 代表节点中 tag 显示的数字, 0 为不显示

使用了 item/view/delegate 来实现自定义的导航栏,详见源码

http://download.csdn.net/detail/sssooonnnggg/8396829

效果:







1条评分金钱+1
xiongyingeng 金钱 +1 - 2016-12-07
离线fanstar

只看该作者 47楼 发表于: 2021-12-31
回 liudianwu 的帖子
请问,我在我的设计器 里面没找到navview控件,我复制过去,结果代码不报错,就是不显示(空白,但是有底色),这个 该怎么解决啊?
离线cynthia~

只看该作者 46楼 发表于: 2021-10-13
回 liudianwu 的帖子
liudianwu:更新过一个版本:
* 1:合并成一个文件
* 2:隐藏多余接口,只保留readData函数接口
* 3:修正重复加载数据BUG及关闭时有时候崩溃的BUG
* 4:修正当范围值中最小值为负数时的bug
....... (2016-11-11 13:21) 

大侠能有完整的源码嘛,万分感谢
离线1159578622

只看该作者 45楼 发表于: 2019-11-19
NavModel::TreeNode* node = (NavModel::TreeNode*)index.data(Qt::UserRole).toUInt();
我也碰到这个问题 利用5楼给的方法 仍然报错
最后解决方法:
class NavModel : public QAbstractListModel
{
    .........
};
这个类后面加 这么四行
Q_DECLARE_METATYPE(NavModel::TreeNode);
Q_DECLARE_METATYPE(NavModel::ListNode);
Q_DECLARE_METATYPE(NavModel::TreeNode*);
Q_DECLARE_METATYPE(NavModel::ListNode*);
自定义结构需要注册 才能被元对象系统识别
离线beijixinghuo

只看该作者 44楼 发表于: 2019-07-01
厉害了,谢谢分享
离线my2019

只看该作者 43楼 发表于: 2019-05-21
能否发份给我学习一下,my163mail2019@163.com,谢谢!
离线my2019

只看该作者 42楼 发表于: 2019-05-21
能否发份给我,你CSDN要46分,太多了,没有积分。
离线liugq74

只看该作者 41楼 发表于: 2019-05-17
:-1: error: cannot find -lkernel32

请问各位大侠这个报错是什么原因呢?谢谢
离线手机号

只看该作者 40楼 发表于: 2018-04-24
qml树形结构
此签名到QT倒闭
离线hunt978

只看该作者 39楼 发表于: 2017-09-13
回 紫月清风 的帖子
紫月清风:[图片]
为什么我出现了很多外部链接错误 (2017-07-31 17:31) 

编译需要QtXml依赖包
离线紫月清风

只看该作者 38楼 发表于: 2017-07-31

为什么我出现了很多外部链接错误
离线tiangao

只看该作者 37楼 发表于: 2017-07-20
为什么我下载了提示文件被破坏?
离线liuzhezhe

只看该作者 36楼 发表于: 2017-07-19
    
离线lxiaohai

只看该作者 35楼 发表于: 2016-12-08
为什么多级,如3级或者4级就无效了?

只看该作者 34楼 发表于: 2016-12-06
收了,多谢
离线return

只看该作者 33楼 发表于: 2016-11-21
离线liudianwu

只看该作者 32楼 发表于: 2016-11-11
更新过一个版本:
* 1:合并成一个文件
* 2:隐藏多余接口,只保留readData函数接口
* 3:修正重复加载数据BUG及关闭时有时候崩溃的BUG
* 4:修正当范围值中最小值为负数时的bug
* 5:增加默认支持鼠标悬停
* 6:增加一些完整性校验
* 7:增加设置各种颜色
* 8:+-伸缩图形改成绘制,同时支持+-图形及三角形图形
* 9:增加setData数据接口,使之同时支持字符串链表作为数据源
* 10:增加设置分割线条是否可见
* 11:增加设置伸缩图片采用何种颜色
* 12:改进分割线条高度
* 13:将显示未读条数部分改成提示信息,可以是字符串
*/


源码下载: usercontrol.zip (6 K) 下载次数:657
1条评分金钱+1
xiongyingeng 金钱 +1 - 2016-12-07
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线yyzq

只看该作者 31楼 发表于: 2016-09-24
感觉像是遇到熟人了,TJ。。。。。。。。。。
离线hunterzf

只看该作者 30楼 发表于: 2016-09-23
楼主,真是谢谢了
离线hunterzf

只看该作者 29楼 发表于: 2016-09-22
谢谢楼主,正在做这么个东西
离线pamxy

只看该作者 28楼 发表于: 2016-02-04
根据5楼兄台修改了的,QT5能够运行,也用VS2013编译过的版本
test_NavView.1.1 test_NavView1.1.7z (4758 K) 下载次数:605
你不是最优秀的,但你可以成为最优秀的, you are the best!
离线thomye

只看该作者 27楼 发表于: 2016-02-02
楼主,你好,我想请教一下,通过什么方法,点击导航就出现对应的窗口
离线xyinfotech01

只看该作者 26楼 发表于: 2015-11-17
真心好东西,学习了
离线371933024

只看该作者 25楼 发表于: 2015-10-12
在网上找了好几天没有找到这种效果,多谢楼主!!!
离线liyiq_82

只看该作者 24楼 发表于: 2015-07-22
现在我想把线条变细,但是无论怎么调,最底部的那条线还是比其他线更粗,楼主能否告知下怎么解决
离线wang17321

只看该作者 23楼 发表于: 2015-07-21
楼主能把修改后的源代码发出来,让我们这些菜鸟学习吗?
本帖提到的人: @sssooonnnggg
离线toby520

只看该作者 22楼 发表于: 2015-07-21
mac下面直接崩溃
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线liyiq_82

只看该作者 21楼 发表于: 2015-07-18
您好,楼主。你给的是最多2级菜单,我把代码下载下来后,怎么都实现不了三级菜单,求解
离线heartlessjun

只看该作者 20楼 发表于: 2015-06-09
你这 确实是个好思路,调取XML实现,我用QTreeWidget  实现的,加了些美化,还是谢谢你。。。。学习了!
离线fly_fine

只看该作者 19楼 发表于: 2015-05-13
如果导航栏列表的数据不固定,是从数据库获取的,能够实时更新吗?
离线傲天雪

只看该作者 18楼 发表于: 2015-05-13
真心不错
离线zhangzhenti

只看该作者 17楼 发表于: 2015-04-10
牛逼,不错啊
离线zichuangyang

只看该作者 16楼 发表于: 2015-03-06
  
离线xinlanbobo

只看该作者 15楼 发表于: 2015-03-05
谢谢分享
离线sssooonnnggg

只看该作者 14楼 发表于: 2015-02-02
回 咬蚊嚼渍 的帖子
咬蚊嚼渍:这个导航条,我试着用QTreeWidget来实现,现在可以做成这个样子:
[图片]
有些是用QSS写的样式,有些是直接在QT设计师里改属性的。
现在感觉到了这个步,如果想加一些图片到QTreeWidget的item里面,
是不是需要用到模型视图才行?QT文档里的qss说明说得不太清楚,
... .. (2015-02-01 17:07)

想要加图标到 item 里面,直接调用 QTreeWidgetItem 的 setIcon 就可以了,但是无法根据目标当前的状态来切换图标。比如我希望当 item 选中时图标是白色的,不选中时图标是黑色的,这种需求无法通过纯 qss 来实现。

通过继承 QItemDelegate ,重写 paint 函数,实现的导航栏就比较灵活了,想怎么画就怎么画
离线咬蚊嚼渍

只看该作者 13楼 发表于: 2015-02-01
这个导航条,我试着用QTreeWidget来实现,现在可以做成这个样子:

有些是用QSS写的样式,有些是直接在QT设计师里改属性的。
现在感觉到了这个步,如果想加一些图片到QTreeWidget的item里面,
是不是需要用到模型视图才行?QT文档里的qss说明说得不太清楚,
不少东西没法用qss改。
有大神可以帮忙改改就好了。
离线圣域天子

只看该作者 12楼 发表于: 2015-01-28
能做成控件,就最好了
离线liudianwu

只看该作者 11楼 发表于: 2015-01-28
回 sssooonnnggg 的帖子
sssooonnnggg:
我的开发环境是4.8,使用5.0进行开发的兄弟可以使用楼上修改过的代码

楼上的忘记把config.xml打包进去了! config.zip (1 K) 下载次数:431
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线sssooonnnggg

只看该作者 10楼 发表于: 2015-01-28
我的开发环境是4.8,使用5.0进行开发的兄弟可以使用楼上修改过的代码
离线morg

只看该作者 9楼 发表于: 2015-01-27
谢谢,挺好用。调整到了Qt5并加了hover row功能(原mouse move hover row好像没有起作用)。请大家继续完善。源码 test_NavView.rar (12 K) 下载次数:656

快速回复
限100 字节
 
上一个 下一个