设置QListWidgetItem选中的样式

如果在QListWidget中插入QListWidgetItem(比方itemA),默认情况下,在点击itemA时,会被选中
而且呈高亮,但是我们往往希望这些是可以自己改变的。
为了这个目的,我在网上一直搜索QListWidget改变选中,也确实找到了设置的方法,如下:
是利用QPalette的setBrush设置,然后将此QPalette设置成QListWidget的palette。
    QImage img;
    QPalette palette = this->palette();
    img.load(BACK_IMAGE);
    palette.setBrush(QPalette::Active, QPalette::Highlight, QBrush(QPixmap::fromImage(img)));
    palette.setBrush(QPalette::Inactive, QPalette::Highlight, QBrush(QPixmap::fromImage(img)));
    this->setPalette(palette);
 
但是很奇怪的是,我这么设置的话,在点击itemA后会直接段错误退出。
 
所以只好另想办法。后来想到,QListWidgetItem有没有自己的属性设置被选中时的样式。
在help里发现QListWidgetItem有这么一个函数setFlags,声明如下:
void QListWidgetItem::setFlags ( Qt::ItemFlags flags )
再顺势找到Qt::ItemFlags的项,如下:
Constant                           Value          Description
Qt::NoItemFlags                0                It does not have any properties set.
Qt::ItemIsSelectable         1                 It can be selected.
Qt::ItemIsEditable             2                It can be edited.
Qt::ItemIsDragEnabled     4                 It can be dragged.
Qt::ItemIsDropEnabled     8                 It can be used as a drop target.
Qt::ItemIsUserCheckable 16                It can be checked or unchecked by the user.
Qt::ItemIsEnabled            32                The user can interact with the item.
Qt::ItemIsTristate             64               The item is checkable with three separate states.
 
那么,我试着调用setFlags,并且不给予Qt::ItemIsSelectable属性,结果让人欣慰,点击后itemA并不会被
变成选中状态,也不会被高亮。
在自己重载了eventFilter,根据itemAt判断是否点击了itemA,如果是,调用setBackground换成自己想要的图片
,完成。

 
  
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值