如何更改 QLineSeries 的 z-index?
How to change the z-index of QLineSeries?
有什么方法可以为我添加到 QChart 中的一些 QAbstractSeries 排序 z-index 吗?
好像是QChart内部做的。
问题在于 Q*Series 实现生成独立的 QGraphicsItem
s。这些隐藏在系列的 private implementation 中。没有简单的方法可以从外部访问它们。
理论上可以通过场景对象找到它们(例如QGraphicsScene::items()
)。但是我没有找到识别它们的好方法。
作为参考,您可以找到有问题的 class here。
Zlevel 由 QtCharts::ChartItem
设置,存储在 QtCharts::ChartPresenter
隐藏在 QtChart[=23= 的私有部分].我们可以通过应用 findChild()
方法来实现它。
ChartPresenter
有一个方法来获取它的项目,但你需要知道如何区分它们(因为一个名称被分配给一个系列。)我使用了不透明度 属性这个目的。请记住,在分配新的 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); }
}
}
有什么方法可以为我添加到 QChart 中的一些 QAbstractSeries 排序 z-index 吗? 好像是QChart内部做的。
问题在于 Q*Series 实现生成独立的 QGraphicsItem
s。这些隐藏在系列的 private implementation 中。没有简单的方法可以从外部访问它们。
理论上可以通过场景对象找到它们(例如QGraphicsScene::items()
)。但是我没有找到识别它们的好方法。
作为参考,您可以找到有问题的 class here。
Zlevel 由 QtCharts::ChartItem
设置,存储在 QtCharts::ChartPresenter
隐藏在 QtChart[=23= 的私有部分].我们可以通过应用 findChild()
方法来实现它。
ChartPresenter
有一个方法来获取它的项目,但你需要知道如何区分它们(因为一个名称被分配给一个系列。)我使用了不透明度 属性这个目的。请记住,在分配新的 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); }
}
}