由于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);
    }
}

09-10 01:31