由于QAbstractSeries的类型是QLineSeries,是否可以将QAbstractSeries连接到点击信号?
我可以执行以下操作:
QlineSeries *series = new QLineSeries();
QChart *chart = new QChart();
series->append(1,1);
chart->addSeries(series);
connect(series, &QLineSeries::clicked, this, &View::myFunction);
但是,如果我在另一个类中定义了该系列,而我只能通过以下方式访问该系列
QList<QAbstractSeries*> seriesList = chart->series();
我无法通过
connect(seriesList[0], &QAbstractSeries::clicked, this, &View::myFunction);
因为QAbstractSeries没有信号“被点击”。但是我可以通过访问类型
seriesList[0].type();
但是现在我不知道如何处理该信息。还是有其他方法可以将序列作为QLineSeries从我的图表中删除?
最佳答案
clicked
信号与 QXYSeries
类及其派生类(例如QLineSeries)的对象相关联,因此解决方案是进行强制转换以过滤系列:
for(QAbstractSeries* series: chart->series()){
if(QXYSeries* xyseries = qobject_cast<QXYSeries *>(series)){
connect(xyseries, &QXYSeries::clicked, this, &View::myFunction);
}
}
使用先前的代码,它们将应用于从QXYSeries派生的类,例如QLineSeries和QScatterSeries,但是如果您只想应用于QLineSeries,则必须执行以下操作:
for(QAbstractSeries* series: chart->series()){
if(QLineSeries* lineseries = qobject_cast<QLineSeries *>(series)){
connect(lineseries, &QLineSeries::clicked, this, &View::myFunction);
}
}