Qt treewidget样式的自定义(转)

这个treewidget样式真是写得让人心碎,主因是那个天杀的表头,真是块古里古怪的硬骨头,令人抓狂,一直找不到给表头设定背景图的方法,让我一度决定弃用tree。

后来表头的属性找到了,下拉条又找不到。第一次接触stylesheet,完全是边做边学,不知所谓,又不想不做,默认的样式我就是看不过眼,处女座的人就是比较神经质。​

网上关于treewidget的样式介绍少之又少,不知道是不是因为大牛们都采用了treeview等其他方法去做了,或者说是tree太简单,只有我那么弱智还要去网上搜。​

总之,经过2天坚持不懈的泣血努力,总算是把这个控件的样式完完全全换掉了。​

特此记录,以资鼓励。​​

 

——————————————————————————————

树形列表控件,主要是对“表头”“列表背景” “下拉条”“鼠标扫动”做处理,以达到自定义效果。​​

不废话了,直接上代码。

m_QTreeWidget->setStyleSheet("​​

//列表背景

QTreeWidget{background-image:url(./image/treelistbk.jpg);}\ ​​

//每一项的身高 鼠标扫过 按下的变色

QTreeWidget::item{height:40px;}\

QTreeWidget::item:hover{}\​​

//表头背景 表头身高

QHeaderView::section{border-image: url(./image/header-test.png); height:40px;} "

);

列表的表头,给图片背景!天知道居然要用Qheaderview!!!天杀的!!!​

 

//下拉条的样式设置  具体内容 参考上一篇 

http://blog.sina.com.cn/s/blog_8a621fc80102vizs.html

m_QTreeWidget->verticalScrollBar()->setStyleSheet("");​

m_QTreeWidget->horizontalScrollBar()->setStyleSheet("");​

 

完毕。其实很简单吧。​

但是却花了很长时间。​

俺写的第一个stylesheet。呼呼。虽浪费2天时间,人都快疯掉,但好歹最终成功了。

也算是入门了。

————————————————————————————​

 

以下是我的其他设置,作为一个初学者,都这两天慢慢琢磨的,留给自己看。

//字体

m_pQTreeWidget->setFont(QFont("Helvetica"));​

//表头字体 居中 (表内项目的字体居中要去add item的地方进行设置,目前没找到别的好办法。。。嘤嘤嘤。。。。)

m_pQTreeWidget->headerItem()->setFont(0,QFont("Helvetica",18,QFont::Bold));

m_pQTreeWidget->headerItem()->setFont(1,QFont("Helvetica",18,QFont::Bold));

m_pQTreeWidget->headerItem()->setTextAlignment(0,Qt::AlignHCenter | Qt::AlignVCenter); ​

m_pQTreeWidget->headerItem()->setTextAlignment(1,Qt::AlignHCenter

Qt::AlignVCenter); ​​

//表头不许移动,不许点击,不许排序。。。。哼哼哈。在我地盘的,你就得听我的!

setHeaderMovable(false);

m_pQTreeWidget->header()->setClickable(false);

m_pQTreeWidget->setFrameShape(QFrame::NoFrame); //设置无边框这样才可以自定义treewidget背景图

 

//表头可点击,点击后可排序

#if 0

//setHeaderHidden(true); //去掉表头

m_pQTreeWidget->header()->setClickable(true); //点击头自动排序

m_pQTreeWidget->setSortingEnabled(true); //用来设置是否可以排序

m_pQTreeWidget->sortItems(0, Qt::AscendingOrder); //id属性,即第0列,升序排列

#endif​

 ​​

----------------------------------------------------------------------

by the way,整理代码的时候发现了,有个很变态的地方。​

当这一句setFrameShape(QFrame::NoFrame);若写在设置横向滚动条的样式之前,则横向滚动条就出不来了,横向滚动条本来是自动出现的。

(虽然我本来就不想要它出现。但我觉得哦,也许样式应该写在最前面。)

http://blog.sina.com.cn/s/blog_8a621fc80102vj09.html

 

posted on   xihong  阅读(15844)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示