如何更改QLineSeries的z-index?

时间:2017-02-05 11:26:49

标签: qt qtchart

有没有办法为添加到QChart的一些QAbstractSeries订购z-index? 似乎QChart在内部做到了。

2 个答案:

答案 0 :(得分:2)

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

ChartPresenter有一种获取其项目的方法,但是您需要知道如何区分它们(因为将名称分配给系列)。为此,我使用了opacity属性。请记住,分配新的 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); }
    }
}

答案 1 :(得分:0)

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

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

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