如果在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换成自己想要的图片
,完成。
设置QListWidgetItem选中的样式
最新推荐文章于 2023-07-18 23:26:01 发布