新浪微博
腾讯微博
会员列表
统计排行
基本信息
到访IP统计
管理团队
管理统计
在线会员
会员排行
版块排行
帖子排行
标签排行
帮助
下拉
用户名
电子邮箱
用户名
密 码
记住登录
登录
找回密码
注册
快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
首页
论坛
Qt下载
作品展
群组
个人中心
捐赠、管理与开发
邮件订阅
帖子
文章
日志
用户
版块
群组
帖子
搜索
QTCN开发网
>
Qt基础编程
>
QTreeView的渲染通过自定义委托实现,怎样在每一个Item上实现不 ..
发帖
回复
返回列表
新帖
11656
阅读
17
回复
QTreeView的渲染通过自定义委托实现,怎样在每一个Item上实现不同的效果
[复制链接]
上一主题
下一主题
离线
phpqinsir
UID:138742
注册时间
2012-11-26
最后登录
2013-11-21
在线时间
83小时
发帖
70
搜Ta的帖子
精华
0
金钱
720
威望
80
贡献值
0
好评度
70
访问TA的空间
加好友
用道具
新手上路
关闭
个人中心可以申请新版勋章哦
立即申请
知道了
加关注
发消息
只看楼主
倒序阅读
楼主
发表于: 2012-12-05
— 本帖被 XChinux 从 Qt图形编程 移动到本区(2013-01-09) —
情况简介:
我模仿QQ的时候,将其用户列表用QTreeView来实现,它的每一个
项是由
继承
QStyledItemDelegate的类来实现渲染的。我只重写了他的
paint方法。
现在我有一个这样的想法:当鼠标移动到每一个Item项的时候,让背景
颜色
变换。不知道能否在
QStyledItemDelegate的子类中实现。还是要继承QTreeView视图类再来重新实现它的单击
事件
。如果,是要继承QTreeView来实现的话,我已经这样做了。我在单击里面实现了单击展示的效果。现在增加一个
背景色
,根本行不通。
上一张效果图吧:
图片:RTX截图未命名.png
我只求实现的思路。我亲自去实现,再把解决后的代码或完整思路整理结贴。希望,各位大侠百忙中也来一下。谢谢!
共
条评分
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
回复
举报
分享到
淘江湖
新浪
QQ微博
QQ空间
开心
人人
豆瓣
网易微博
百度
鲜果
白社会
飞信
离线
jdwx
UID:107742
注册时间
2010-11-12
最后登录
2016-02-01
在线时间
4619小时
发帖
2939
搜Ta的帖子
精华
0
金钱
30465
威望
3015
贡献值
0
好评度
3005
访问TA的空间
加好友
用道具
论坛版主
加关注
发消息
只看该作者
1楼
发表于: 2012-12-05
500个item的时候卡补卡?
共
条评分
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
回复
举报
离线
phpqinsir
UID:138742
注册时间
2012-11-26
最后登录
2013-11-21
在线时间
83小时
发帖
70
搜Ta的帖子
精华
0
金钱
720
威望
80
贡献值
0
好评度
70
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
2楼
发表于: 2012-12-05
回 1楼(jdwx) 的帖子
没试过,目前有50左右。没卡。瞬间的速度。再说了,你的好友能多到哪里去呢。顶多200个吧。一般的QQ应用也只有会员能超过200.
共
条评分
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
回复
举报
离线
kimtaikee
UID:77767
注册时间
2009-04-15
最后登录
2024-02-26
在线时间
3553小时
发帖
1296
搜Ta的帖子
精华
2
金钱
26976
威望
2027
贡献值
4
好评度
2014
访问TA的空间
加好友
用道具
内测会员
加关注
发消息
只看该作者
3楼
发表于: 2012-12-05
首先,我就喜欢这样问问题的,只求思路而不是像个大爷式的要求上代码。
看样子你这个是一层的TreeWidget,完全不用QTreeWidget就可以实现。
那个分组可以是个QToolButton,然后每个好友可以是有3个QLabel组成的widget,然后就是自己负责计算layout了,for example:
复制代码
class UserItem : public QWidget
{
Q_OBJECT
public:
explicit UserItem(QWidget* parent = 0);
private:
QLabel* _pixmap;
QLabel* _name;
QLabel* _descriptiveText;
QHBoxLayout* _mainLayout;
QVBoxLayout* _infoLayout;
}
class GroupItem : public QWidget
{
Q_OBJECT
public:
explicit GroupItem(QWidget* parent = 0);
virtual ~GroupItem(){ clear(); }
public:
void setGroupName(const QString& name);
QString groupName() const;
void addUser(UserItem* item);
Container<UserItem*> users() const;
void clear();
private:
QString _groupName;
Container<UserItem*> _users;
}
class SilumateQQTree : public QWidget
{
Q_OBJECT
public:
SilumateQQTree(QWidget* parent = 0);
protected:
void resizeEvent(QResizeEvent *e);
private:
void calcGeometry(); // this is what you need to implement
private:
Container<GroupItem*> _groups;
}
共
条评分
回复
举报
离线
jdwx
UID:107742
注册时间
2010-11-12
最后登录
2016-02-01
在线时间
4619小时
发帖
2939
搜Ta的帖子
精华
0
金钱
30465
威望
3015
贡献值
0
好评度
3005
访问TA的空间
加好友
用道具
论坛版主
加关注
发消息
只看该作者
4楼
发表于: 2012-12-05
回 3楼(kimtaikee) 的帖子
还需要滚动的办法?
共
条评分
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
回复
举报
离线
kimtaikee
UID:77767
注册时间
2009-04-15
最后登录
2024-02-26
在线时间
3553小时
发帖
1296
搜Ta的帖子
精华
2
金钱
26976
威望
2027
贡献值
4
好评度
2014
访问TA的空间
加好友
用道具
内测会员
加关注
发消息
只看该作者
5楼
发表于: 2012-12-05
回 4楼(jdwx) 的帖子
把这个控件放到QScrollArea中,QScrollArea负责了滚动这块繁琐的事情。
共
条评分
回复
举报
离线
jdwx
UID:107742
注册时间
2010-11-12
最后登录
2016-02-01
在线时间
4619小时
发帖
2939
搜Ta的帖子
精华
0
金钱
30465
威望
3015
贡献值
0
好评度
3005
访问TA的空间
加好友
用道具
论坛版主
加关注
发消息
只看该作者
6楼
发表于: 2012-12-05
千万不要用QLayout做管理工作,来管理UserItem。
因为每个QLayout的容量是127个控件。
容量不受限制就要计算pos,之后move每个UserItem。
共
条评分
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
回复
举报
离线
phpqinsir
UID:138742
注册时间
2012-11-26
最后登录
2013-11-21
在线时间
83小时
发帖
70
搜Ta的帖子
精华
0
金钱
720
威望
80
贡献值
0
好评度
70
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
7楼
发表于: 2012-12-05
回 3楼(kimtaikee) 的帖子
感谢各位的回答。我这个用QToolButton不好实现。因为,QToolButton只能展开一组。而我模仿QQ的功能是可以同时展开多组。其次,为啥QTreeView默认情况下,选中是有状态。我猜想,它的源代码里面会有类似的代码来实现颜色的交替。但是,想看它的源代码确实不好找啊。不知道还无对应的方法能实现颜色的交替。
共
条评分
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
回复
举报
离线
phpqinsir
UID:138742
注册时间
2012-11-26
最后登录
2013-11-21
在线时间
83小时
发帖
70
搜Ta的帖子
精华
0
金钱
720
威望
80
贡献值
0
好评度
70
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
8楼
发表于: 2012-12-05
回 1楼(jdwx) 的帖子
刚刚我测试了2000+的Item,一点也不卡。速度瞬间的感觉。我是把这些数据全部保存到SQLite数据库中的。
共
条评分
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
回复
举报
离线
phpqinsir
UID:138742
注册时间
2012-11-26
最后登录
2013-11-21
在线时间
83小时
发帖
70
搜Ta的帖子
精华
0
金钱
720
威望
80
贡献值
0
好评度
70
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
9楼
发表于: 2012-12-06
我自己想到了一个办法:用QTreeView进行区域重绘。即鼠标选中某一个Item的时候,把这个Item的Rect值拿到。然后,地这个选择这个区域进行重绘。
共
条评分
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
回复
举报
离线
jdwx
UID:107742
注册时间
2010-11-12
最后登录
2016-02-01
在线时间
4619小时
发帖
2939
搜Ta的帖子
精华
0
金钱
30465
威望
3015
贡献值
0
好评度
3005
访问TA的空间
加好友
用道具
论坛版主
加关注
发消息
只看该作者
10楼
发表于: 2012-12-06
回 9楼(phpqinsir) 的帖子
paint(,option,)option里面有你需要的参数,什么都有。
共
条评分
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
回复
举报
离线
phpqinsir
UID:138742
注册时间
2012-11-26
最后登录
2013-11-21
在线时间
83小时
发帖
70
搜Ta的帖子
精华
0
金钱
720
威望
80
贡献值
0
好评度
70
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
11楼
发表于: 2012-12-11
关于这个问题,我最终还是选择了强大的QGraphics这个图形视图框架。它能满足我的要求。
共
条评分
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
回复
举报
离线
phpqinsir
UID:138742
注册时间
2012-11-26
最后登录
2013-11-21
在线时间
83小时
发帖
70
搜Ta的帖子
精华
0
金钱
720
威望
80
贡献值
0
好评度
70
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
12楼
发表于: 2012-12-11
回 10楼(jdwx) 的帖子
今天通过仔细回味代码,以及查看了官方自带的QGraphics的例子。最终发现,我走的路子是对的。不用QGraphics,利于QTreeView完全能做出像QQ那样的感觉。只是相对于QGraphics来说,QTreeView要稍等复杂一些。因为,要在自己实现QTreeView类里面的双击。而,QGraphics全部放到了Item中。容易管理。希望,遇到同样问题的朋友可以借鉴。谢谢大家帮助!
共
条评分
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
回复
举报
离线
jdwx
UID:107742
注册时间
2010-11-12
最后登录
2016-02-01
在线时间
4619小时
发帖
2939
搜Ta的帖子
精华
0
金钱
30465
威望
3015
贡献值
0
好评度
3005
访问TA的空间
加好友
用道具
论坛版主
加关注
发消息
只看该作者
13楼
发表于: 2012-12-11
其实用QTreeView做比较简单,以前类似的都用QWidget自己做个控件放进QListWidget里,非常灵活,但是就是数量不能多超过200个就会导致程序启动缓慢。中间那列就是。
图片:294-rw.png
共
条评分
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
回复
举报
离线
phpqinsir
UID:138742
注册时间
2012-11-26
最后登录
2013-11-21
在线时间
83小时
发帖
70
搜Ta的帖子
精华
0
金钱
720
威望
80
贡献值
0
好评度
70
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
14楼
发表于: 2012-12-11
回 13楼(jdwx) 的帖子
不可能吧。我用QtreeView,200个Item都瞬间的速度。用SQlite做的数据存储。我觉得可能是不是你在某个位置放了网络连接的代码,或者IO较大的操作。不然,只是显示的话,速度进学顺畅的。
共
条评分
qtcn.org是我见过最热心的论坛,也是解决问题率最高的论坛。希望,我的问题能让更多的人少走弯路。
回复
举报
离线
jdwx
UID:107742
注册时间
2010-11-12
最后登录
2016-02-01
在线时间
4619小时
发帖
2939
搜Ta的帖子
精华
0
金钱
30465
威望
3015
贡献值
0
好评度
3005
访问TA的空间
加好友
用道具
论坛版主
加关注
发消息
只看该作者
15楼
发表于: 2012-12-11
用QListWidget放进200个widget一定会启动缓慢,但是启动之后滚动不卡,200个和20个区别很大,你可以试试,往一个QListWidget里放200个QPushButton或者更多。如果只是显示文本不放QWidget,2000个文本立即完成。
共
条评分
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
回复
举报
离线
cyuyuanc
UID:139580
注册时间
2012-12-20
最后登录
2013-01-28
在线时间
4小时
发帖
20
搜Ta的帖子
精华
0
金钱
210
威望
30
贡献值
0
好评度
20
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
16楼
发表于: 2012-12-23
共
条评分
回复
举报
离线
彩阳
UID:136309
注册时间
2012-09-13
最后登录
2020-04-15
在线时间
2784小时
发帖
1247
搜Ta的帖子
精华
2
金钱
13131
威望
1310
贡献值
11
好评度
1302
访问TA的空间
加好友
用道具
精灵王
加关注
发消息
只看该作者
17楼
发表于: 2012-12-26
回 15楼(jdwx) 的帖子
可以放出demo,给我们测试一下。
共
条评分
上海Qt开发联盟,热忱地欢迎你的加入!
回复
举报
发帖
回复
返回列表
http://www.qtcn.org/bbs
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问
快速回复
限100 字节
您目前还是游客,请
登录
或
注册
进入高级模式
文字颜色
发 布
回复后跳转到最后一页
上一个
下一个
关闭
补充发布信息
验证码:
发 布
隐藏
快速跳转
站务及资讯
网站公告
新闻资讯
Qt官方发布
网站管理
Qt应用及资源
Qt 作品展
Qt代码秀
Qt应用版
Qt技术讨论区
Qt安装与发布
Qt中文处理
Qt基础编程
Qt QML开发
Qt嵌入式开发
Qt移动平台开发
其它技术开发讨论区
Qt图书专区
《C++ GUI Qt 4编程》(第2版)专栏
《Qt高级编程》专栏
《零基础学Qt4编程》专栏
《Qt设计模式》(第2版) 图书专栏
Python Qt GUI快速编程
Qt项目开发区
天池项目
Qt开放平台开发库
Qt版百度云笔记
机械CAD
Qt文档计划
QTCN网站系统开发
扇贝词典
非活跃项目区
社区中心
帖子回收站(Trash)
招聘、求职、供求、广告等
休闲娱乐
关闭
关闭
选中
1
篇
全选