如何更改 QLineSeries 的 z-index?

How to change the z-index of QLineSeries?

有什么方法可以为我添加到 QChart 中的一些 QAbstractSeries 排序 z-index 吗? 好像是QChart内部做的。

问题在于 Q*Series 实现生成独立的 QGraphicsItems。这些隐藏在系列的 private implementation 中。没有简单的方法可以从外部访问它们。

理论上可以通过场景对象找到它们(例如QGraphicsScene::items())。但是我没有找到识别它们的好方法。

作为参考,您可以找到有问题的 class here

ZlevelQtCharts::ChartItem 设置,存储在 QtCharts::ChartPresenter 隐藏在 QtChart[=23= 的私有部分].我们可以通过应用 findChild() 方法来实现它。

ChartPresenter 有一个方法来获取它的项目,但你需要知道如何区分它们(因为一个名称被分配给一个系列。)我使用了不透明度 属性这个目的。请记住,在分配新的 z 级别 时,场景可以更低(例如 Legend。)

void AppDispatcher::setZLevel(QtCharts::QXYSeries *series)
{
    QtCharts::ChartPresenter* present = series->chart()->findChild<QtCharts::ChartPresenter*>();
    Q_ASSERT(present);

    QList<QtCharts::ChartItem *> items = present->chartItems();

    for(QtCharts::ChartItem * item : items){
        if(item->opacity() == 0.99) { item->setZValue(QtCharts::ChartPresenter::ZValues::SeriesZValue+3); item->setOpacity(1); }
        if(item->opacity() == 0.98) { item->setZValue(QtCharts::ChartPresenter::ZValues::SeriesZValue+2); item->setOpacity(1); }
        if(item->opacity() == 0.97) { item->setZValue(QtCharts::ChartPresenter::ZValues::SeriesZValue+1); item->setOpacity(1); }
    }
}