如何在qt中更改一个QBarSet条/元素颜色?

时间:2018-05-29 12:45:42

标签: c++ qt qt5 qchart

我将hovered的{​​{1}}信号连接到一个插槽,当鼠标悬停在条形集上时会改变QBarSet颜色,并在鼠标离开时重置颜色。 /> 代码段如下所示:

QBarSet

这些是在徘徊和徘徊之前的照片: enter image description here

enter image description here

如您所见,如果我将鼠标悬停在条形集上,则所有这些条形图条(元素)颜色都变为红色。但我想将鼠标悬停在条形集的特定条形图(元素)上,并且该条形图(元素)会改变其颜色,其余部分保持不变。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

目前无法单独更改列的颜色,因此我将展示一种解决方法。这包括在悬停项目的顶部放置一个新项目,如下所示:

formDataArray

enter image description here

答案 1 :(得分:0)

我只是在搜索并尝试使其工作,可以通过将x强制转换为one-to-one or one-many来进行更改。

与先前的答案类似:

QGraphicsItem

此外,可以使用QGraphicsRectItem的索引,但是这需要大量的工作,并且不可能直接执行。在我的情况下,我创建了一种方法来查找图表中的所有条形图对象,并按 x 位置对其进行排序,因此QObject::connect(set0, &QBarSet::hovered, [&w](bool status, int /*index*/){ QPoint p = w.mapFromGlobal(QCursor::pos()); if(status){ QGraphicsRectItem *rect = qgraphicsitem_cast<QGraphicsRectItem *>(w.itemAt(p)); rect->brush().setColor(Qt::red); rect->update(); } else{ rect->brush().setColor(Qt::blue); //or change it to default colour rect->update(); } }); 中的索引与排序列表相对应。

因此,首先,我们需要找到图表中的所有条形并将其转换为QBarSet::hovered并对其进行排序。

QObject::connect

,然后执行相同操作,但使用索引QGraphicsRectItem

void sortGraphicItems( std::vector<std::pair<float,QGraphicsRectItem*> > &item_list){

    for(int i = 0; i<this->items().size();i++){
        if(w->items().at(i)->flags().testFlag(QGraphicsItem::ItemIsSelectable)){    //This selects all selectable items
            QGraphicsRectItem *it = qgraphicsitem_cast<QGraphicsRectItem *>(this->items().at(i));
            if (!it)    //if the graphic object is not type of QGraphicsRectItem
                continue;
            item_list.push_back( std::make_pair(it->rect().x(), it) );
        }
    }
    std::sort(item_list.begin(),item_list.end());
}