Сигнал QAbstractSeries нажал, потому что тип QLineSeries - PullRequest
1 голос
/ 16 февраля 2020

Есть ли способ подключить 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?

1 Ответ

0 голосов
/ 16 февраля 2020

Сигнал 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);
    }
}
...