已知可以通过重写QStyledItemDelegate 的paint函数实现自定义item作为QListView的元素,但有时会有改变item中某一元素样式的需求(比如点击某一按钮更改皮肤),这时候直接在paint函数中修改并不起作用。
if (option.state.testFlag(QStyle::State_Selected)) {
painter->setPen(QPen(QColor(select_color_)));
painter->setBrush(QColor(select_color_));
painter->drawPath(painter_path);
}
以上代码是点击QListView中元素改变背景颜色的功能,如果想要更改背景色直接更改select_color_的值是不起作用的,QListView中点击的背景色仍然会是更改之前的颜色。
原因:
这是由于QListView最开始插入元素的时候绑定有一个ItemDelegate,如果后续不重新绑定新的ItemDelegate,那么再继续箱QListView中插入元素仍然会依据最初绑定 ItemDelegate的paint函数进行绘制。
解决方法:
当需要对paint中绘制的元素更改其显示风格时,在完成对其参数的修改之后,还应在QListView中重新绑定一个修改过之后的QStyledItemDelegate对象。
//最初绑定的MyItemDelegate
MyItemDelegate* my_item_delegate = new MyItemDelegate(this);
setItemDelegate(my_item_delegate);
//检测到