项目中使用QTreeWidget默认选中是蓝色的,我想改成其他颜色,代码是这样:
ChartLeftTree::ChartLeftTree(QTreeWidget *parent) : QTreeWidget(parent)
{
QStringList chartNames = { "bar","pie","line" };
int size = chartNames.size();
for(int i = 0; i < size; ++i){
QString chartName = chartNames.at(i);
QTreeWidgetItem * item = new QTreeWidgetItem(this);
item->setText(0,chartName);
item->setIcon(0,QIcon(CHART_ICON_PATH));
}
this->setHeaderHidden(true);
this->setStyleSheet("QTreeView::item::selected{background-color:green;} QTreeView::item::hover{background-color:green;}");
}
但是显示结果是这样:
显然绿色没有完全覆盖,不能达到我想要的结果
网上提问了好多人都没有人回答,无奈自己搜吧,终于一篇文章给我了启发https://www.cnblogs.com/sunchaothu/p/9601298.html#qtreewidget
其中一句话给了我很大启发:TreeWidget的 checkbox 是由 indicator控制的, 展开/合起的是branch,于是我增加了branch的设置
this->setStyleSheet("QTreeView::branch::hover{background-color:red;} QTreeView::item::hover{background-color:red;} QTreeView::branch::selected{background-color:green;} QTreeView::item::selected{background-color:green;} ");
结果是这样
问题解决另外,再设置hover和selected的时候,顺序会影响显示效果,现在是前面设置hover后面设置的selected,当滑动到选中的条目时候,显示的是选中时的颜色(绿色),如果先设置selected,后设置hover,当滑动到选中的条目时候,显示的是滑动的颜色(红色)