首页 > 解决方案 > QAbstractSeries 信号被点击,因为类型是 QLineSeries

问题描述

有没有办法将 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 从我的图表中删除?

标签: c++qtqt5qchartqchartview

解决方案


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

推荐阅读