7

有没有办法为我添加到 QChart 的一些 QAbstractSeries 订购 z-index?似乎 QChart 在内部执行此操作。

4

2 回答 2

2

ZlevelQtCharts::ChartItem存储在隐藏在QtChartQtCharts::ChartPresenter的私有部分中的设置。我们可以通过应用该方法来实现它。findChild()

ChartPresenter有一种方法来获取它的项目,但您需要知道如何区分它们(因为名称被分配给一个系列。)我为此目的使用了 opacity 属性。请记住,在分配新的z level时,场景可能会更低(例如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); }
    }
}
于 2020-08-06T14:46:46.623 回答
0

问题是 Q*Series 实现会生成独立QGraphicsItem的 s。这些隐藏在系列的私有实现中。没有简单的方法可以从外部访问它们。

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

作为参考,您可以在此处找到相关课程。

于 2018-03-12T12:37:14.450 回答