QTreeWidget修改行选中及滑过颜色

项目中使用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;}");
}

但是显示结果是这样:

QTreeWidget修改行选中及滑过颜色_第1张图片

显然绿色没有完全覆盖,不能达到我想要的结果

网上提问了好多人都没有人回答,无奈自己搜吧,终于一篇文章给我了启发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;} ");

结果是这样

QTreeWidget修改行选中及滑过颜色_第2张图片

问题解决另外,再设置hover和selected的时候,顺序会影响显示效果,现在是前面设置hover后面设置的selected,当滑动到选中的条目时候,显示的是选中时的颜色(绿色),如果先设置selected,后设置hover,当滑动到选中的条目时候,显示的是滑动的颜色(红色)

你可能感兴趣的:(qt)