• 25041阅读
  • 11回复

QSS(qt样式表)怎么给QTreeWidget的每一项加上图标呀? [复制链接]

上一主题 下一主题
离线wuweihua0115
 
只看楼主 倒序阅读 楼主  发表于: 2012-07-04
— 本帖被 XChinux 从 Qt图形编程 移动到本区(2012-07-04) —
关键词: QSSQTreeWidget
QSS(qt样式表)怎么给QTreeWidget的每一项加上图标呀? 要实现如下图的功能:
如果不能用QT样式表实现,那有什么好点的办法吗?


我自己写的QSS只能是把前面的“+”改成了我自己的图标了,怎么会这样?下面是我自己做出的效果,不是我想要的。。。
离线uidab

只看该作者 1楼 发表于: 2012-07-04
回 楼主(wuweihua0115) 的帖子
这个要求似乎用QSS解决不了的。还是看看QTreeWidgetItem
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线XChinux

只看该作者 2楼 发表于: 2012-07-04
得区分清楚branch的图标和item自己的图标。所谓的“+”号那些图是branch图,是可以通过qt style sheet改变的。item自己的图,QTreeWidgetItem有setIcon()方法来进行设置。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线wuweihua0115
只看该作者 3楼 发表于: 2012-07-05
回 2楼(XChinux) 的帖子
恩,我在帮助文档里查到了这个:void QTreeWidgetItem::setIcon ( int column, const QIcon & icon ),还是有点不明白,参数column是代表列数,那是不是说明只能对某一列的所有元素加上相同的图标呢??    我想要的效果是第1列有两种图标的,我要怎么区分呢???
  如果可以,希望您写段测试代码
离线ypchen

只看该作者 4楼 发表于: 2012-07-06
可以使用样式表:
关闭时:
QTreeWidget::branch:closed:has-children:!has-siblings,
QTreeWidget::branch:closed:has-children:has-siblings { image: url(:img/images/add.bmp);}
  
打开时:
QTreeWidget::branch:open:has-children:!has-siblings,
QTreeWidget::branch:open:has-children:has-siblings { image: url(:img/images/del.bmp); }

贴上相应的图片就可以了
离线ypchen

只看该作者 5楼 发表于: 2012-07-06
不好意思,上面是针对那个+、-按钮的,你要的应该是这样:
QTreeWidgetItem *storage_2 = new QTreeWidgetItem(ui->storageTree);    storage_2->setIcon(0, QIcon(":img/images/TitleTabHdd.bmp"));    storage_2->setText(0, tr("storage_2"));    storage_2->setExpanded(true);    QTreeWidgetItem *storage_21 = new QTreeWidgetItem(storage_2);    storage_21->setIcon(0, QIcon(":img/images/CarOnline.bmp"));    storage_21->setText(0, tr("003"));    QTreeWidgetItem *storage_22 = new QTreeWidgetItem(storage_2);    storage_22->setIcon(0, QIcon(":img/images/CarOnline.bmp"));    storage_22->setText(0, tr("004"));具体的图片你自己去换路径了
离线米饭拌面

只看该作者 6楼 发表于: 2012-07-06
看Demo吧, ItemView里的Directory View。直接使用QDirModel
QQ:32336134
离线wuweihua0115
只看该作者 7楼 发表于: 2012-07-06
回 5楼(ypchen) 的帖子
   恩,谢谢,这样是可以实现我要的功能了。。。。。
离线wuweihua0115
只看该作者 8楼 发表于: 2012-07-06
回 6楼(米饭拌面) 的帖子
  谢谢指点。。。。。以后我会多看看QT自带的demo的
离线wuweihua0115
只看该作者 9楼 发表于: 2012-07-10
引用第5楼ypchen于2012-07-06 14:52发表的  :
不好意思,上面是针对那个+、-按钮的,你要的应该是这样:
QTreeWidgetItem *storage_2 = new QTreeWidgetItem(ui->storageTree);    storage_2->setIcon(0, QIcon(":img/images/TitleTabHdd.bmp"));    storage_2->setText(0, tr("storage_2"));    storage_2->setExpanded(true);    QTreeWidgetItem *storage_21 = new QTreeWidgetItem(storage_2);    storage_21->setIcon(0, QIcon(":img/images/CarOnline.bmp"));    storage_21->setText(0, tr("003"));    QTreeWidgetItem *storage_22 = new QTreeWidgetItem(storage_2);    storage_22->setIcon(0, QIcon(":img/images/CarOnline.bmp"));    storage_22->setText(0, tr("004"));具体的图片你自己去换路径了



我用你给的方法,还是实现不了呀?  如果说第一列,不是要判断文件和文件夹吗?因为文件和文件夹的图标是不一样的。那怎么样去判断哪个是文件,哪个是文件夹呢。。。。。。。。
离线ypchen

只看该作者 10楼 发表于: 2012-07-17
回 9楼(wuweihua0115) 的帖子
1、QTreeWidgetItem *storage_2 = new QTreeWidgetItem(ui->storageTree);  
storage_2->setIcon(0, QIcon(":img/images/TitleTabHdd.bmp"));    
storage_2->setText(0, tr("storage_2"));  
像这种直接new出一个tree控件的就是文件夹。

2、 QTreeWidgetItem *storage_21 = new QTreeWidgetItem(storage_2);  
storage_21->setIcon(0, QIcon(":img/images/CarOnline.bmp"));  
storage_21->setText(0, tr("003"));    
像这种new出前一个QTreeWidgetItem就是文件。

或者可以这样理解:有子项的就是文件夹(如storage_2 ,其子项是storage_21),没有子项的就是文件(如storage_21 )。
离线wuweihua0115
只看该作者 11楼 发表于: 2012-07-17
回 10楼(ypchen) 的帖子
恩,谢谢指教。。。。。  
不过,这种方法还是有一个不好的地方,如果文件和文件夹上100个,那得写多少一样的代码呀
快速回复
限100 字节
 
上一个 下一个