我想单独设置QBarSet每个栏的颜色。有什么办法可以做到吗?
我知道我可以使用3个单独的QBarSet而不是一个,并分别设置每个QBarSet的颜色来实现我想要的。但是,我不想使用此策略,因为条形图的标签会出现在图表顶部的图例中(我希望每个条形图的标签都显示在条形图的左侧,例如在快照中我提供了)。
我在这里看到了一个解决方案,该解决方案说明了如何在悬停事件上执行此操作,但是我可以找到一种修改该解决方案的方法,以使条形始终保持彩色。
谢谢!
以下方法在另一种配置中可能会失败,因为它高度依赖于图表上放置的内容,因此,如果您想对实际问题做出解答,则必须提供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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句