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;}");
}

但是显示结果是这样:

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

网上提问了好多人都没有人回答,无奈自己搜吧,终于一篇文章给我了启发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,当滑动到选中的条目时候,显示的是滑动的颜色(红色)

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要设置QTreeWidgetItem的选中状态,可以使用setSelected()方法。例如,以下代码将一个QTreeWidgetItem设置为选中状态: ``` QTreeWidgetItem *item = new QTreeWidgetItem(); item->setText(, "Item 1"); item->setSelected(true); ``` 这将创建一个名为“Item 1”的QTreeWidgetItem,并将其设置为选中状态。要取消选中状态,可以将setSelected()方法的参数设置为false。 ### 回答2: QtQTreeView是一个用于显示嵌套项目的小部件。QTreeWidgetItem是QTreeView的一个类,它允许用户将项目添加到树形视图中并选择它们。 为了设置QTreeWidgetItem的选择状态,可以使用setSelected()函数和isSelected()函数。setSelected()函数将项目设置为选中状态,而isSelected()函数检查项目是否已经选中。 以下是一个示例程序,演示如何设置QTreeWidgetItem的选择状态: ```cpp QTreeWidget* treeWidget = new QTreeWidget(); QTreeWidgetItem* item = new QTreeWidgetItem(); // 设置项目的文本和父项目 item->setText(0, "项目"); item->setParent(topLevelItem); // 选择该项目 item->setSelected(true); ``` 在上面的示例中,我们创建了一个QTreeWidgetItem对象,并使用setText()函数为其设置文本。然后,我们将该项目设置为选择状态。 此外,可以使用setSelected()函数和isSelected()函数设置和检查QTreeWidgetItem的选择状态。例如,可以使用以下代码进操作: ```cpp QTreeWidgetItem* item = treeWidget->currentItem(); // 如果当前项目未选择,则将其选择 if (!item->isSelected()) { item->setSelected(true); } ``` 在上面的示例中,我们获取了当前项目,并检查它是否已经选择。如果当前项目未选择,则将其选择。 总之,使用QTreeWidgetItem对象的setSelected()函数和isSelected()函数非常容易设置和检查其选择状态。这些函数使得在QTreeView中选择项目变得非常简单和容易。 ### 回答3: QTQTreeWidget控件是基于树形结构的,用于显示委托(items)和委托的子代。当用户从列表中选择一个委托时,我们通常需要知道哪些委托已经被选中并且从中获取相应的信息。 枚举选中项 首先我们需要知道如何遍历QTreeWidget控件中的所有已选中委托以及如何获取这些委托的列信息。我们可以使用selectedItems()函数,遍历所有已选中QTreeWidgetItem。代码如下: ```cpp QList<QTreeWidgetItem*> items = m_widget->selectedItems(); foreach(QTreeWidgetItem* item, items) { QString text = item->text(0); // 获取委托第一列的信息 qDebug() << "Selected item:" << text; } ``` 代码中我们在选中项列表中遍历项,并使用text()函数获取委托列信息。我们也可以使用后代遍历来遍历所有委托,而不仅仅是已选中的。 设置选中项 我们经常需要设置QTreeWidgetItem为选中状态,以显示为用户当前选中项。可以使用setSelected()函数实现这个目的。下面是如何将一个QTreeWidgetItem设置为选中状态的示例代码: ```cpp QTreeWidgetItem* item = m_widget->topLevelItem(0); // 获取根委托 if(item) { item->setSelected(true); // 设置选中状态 } ``` 我们先获取QTreeWidget的顶级委托根节点,然后通过setSelected()函数将其设置为选中状态。 总结 QTreeWidgetItem是QT控件用于显示树形结构的基础组件之一,可以用于在QT应用程序中实现许多复杂的数据结构。为了知道树形控件中哪些项已经被选中以及如何获取选中项的信息,我们可以使用selectedItems()函数遍历已选中QTreeWidgetItem。而要将一个QTreeWidgetItem设置为选中状态,只需调用setSelected()函数即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值