设置QListWidgetItem选中的样式

来源:互联网 发布:光盘刻录软件哪个好 编辑:程序博客网 时间:2024/05/01 22:28
如果在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          DescriptionQt::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换成自己想要的图片,完成。