【发布时间】:2020-08-08 01:33:24
【问题描述】:
有没有办法为我添加到 QChart 的一些 QAbstractSeries 订购 z-index? 似乎 QChart 是在内部完成的。
【问题讨论】:
有没有办法为我添加到 QChart 的一些 QAbstractSeries 订购 z-index? 似乎 QChart 是在内部完成的。
【问题讨论】:
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); }
}
}
【讨论】:
QList<QtCharts::ChartItem *> items 列表中找到确切的系列?通过不透明度?看起来很丑。
问题在于 Q*Series 实现生成独立的QGraphicsItems。这些隐藏在该系列的private implementation 中。没有简单的方法可以从外部访问它们。
理论上你可以通过场景对象找到它们(例如QGraphicsScene::items())。但是我没有找到识别它们的好方法。
作为参考,您可以找到有问题的课程here。
【讨论】: