有没有办法为添加到QChart的一些QAbstractSeries订购z-index? 似乎QChart在内部做到了。
答案 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。