c++ - 如何设置 QBarSet 中条形的颜色?

标签 c++ qt qchart

我有一个带有单个 QBarSet 的水平条形图,如下所示: enter image description here

我想单独设置 QBarSet 的每个条形的颜色。有什么办法可以做到这一点吗?

我知道我可以使用 3 个独立的 QBarSet 而不是一个,并单独设置每个 QBarSet 的颜色来实现我想要的效果。但是,我不想使用此策略,因为条形图的标签将显示在图表顶部的图例中(我希望每个条形图的标签显示在条形图的左侧,就像在快照中一样)我提供)。

我看到了一个解决方案here这解释了如何在悬停事件上执行此操作,但我可以找到一种方法来修改该解决方案,以便条形图始终是彩色的。

谢谢!

最佳答案

以下方法在其他配置中可能会失败,因为它高度依赖于图表上放置的内容,因此如果您想要真正问题的答案,则必须提供 MRE。

考虑到上述情况,逻辑是通过过滤器获取项目(矩形)并设置颜色:

#include <random>

#include <QApplication>
#include <QtCharts>
QT_CHARTS_USE_NAMESPACE

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QChartView w;

    QBarSet *set0 = new QBarSet("bar1");

    *set0 << 1 << 4 << 3 << 7 << 2 << 5 << 1 << 3 << 3 << 2 << 1 << 6 << 7 << 5;

    QBarSeries *series = new QBarSeries;
    series->append(set0);

    QChart *chart= new QChart;
    w.setChart(chart);
    chart->addSeries(series);

    // filter items
    QList<QGraphicsRectItem *> rect_items;
    for(QGraphicsItem * it : w.items()){
        if(QGraphicsRectItem *rect = qgraphicsitem_cast<QGraphicsRectItem *>(it)){
            if(rect->parentItem() != chart && rect->parentItem()->parentItem() == chart){
                rect_items << rect;
            }
        }
    }

    // change color
    std::random_device dev;
    std::mt19937 rng(dev());
    std::uniform_int_distribution<std::mt19937::result_type> dist255(0, 255);

    for(QGraphicsRectItem * rect : rect_items){
        QColor color(dist255(rng), dist255(rng), dist255(rng));
        rect->setBrush(color);
    }

    w.show();

    return a.exec();
}

enter image description here

关于c++ - 如何设置 QBarSet 中条形的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58741911/

相关文章:

c++ - QPieSlice的Qt坐标

c++ - POSIX 队列配置

c++ - 无法将值存储到 vector 结构中

c++ - Qt - 从 C++ 线程发出信号

c++ - Qt开发lib和跨平台截屏是真的吗?

c++ - Qml 中的 FileDialog 在 Release 中不起作用

c++ - 具有成员函数的 TBB function_node

ios - QtPositioning 5.3,QML PositionSource 在 ios 8.1 上不返回任何数据?

c++ - Qt,将数据传递给另一个类

c++ - 无法使用 qlogvalueaxis.h 编译 Qt 项目