1

有没有办法将 QAbstractSeries 连接到点击信号,因为 QAbstractSeries 的类型是 QLineSeries?

我可以执行以下操作:

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 从我的图表中删除?

4

1 回答 1

0

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);
    }
}
于 2020-02-15T23:20:36.443 回答