【问题标题】:How to change the z-index of QLineSeries?如何更改 QLineSeries 的 z-index?
【发布时间】:2020-08-08 01:33:24
【问题描述】:

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

【问题讨论】:

    标签: qt qtcharts


    【解决方案1】:

    ZlevelQtCharts::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); }
        }
    }
    

    【讨论】:

    • 但是如果我在图表中有很多系列怎么办:如何在QList&lt;QtCharts::ChartItem *&gt; items 列表中找到确切的系列?通过不透明度?看起来很丑。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 2021-11-23
      • 1970-01-01
      • 2012-07-17
      相关资源
      最近更新 更多