Итак, у меня есть этот код ниже:
foreach (QLineSeries* series, lineSeriesMap.values())
{
// ...
}
И я изменю объекты серии в этом цикле, и я не хочу изменять исходный объект, а создам новый отредактированный. Я чрезвычайно новичок в C ++ и Qt, поэтому я хочу что-то вроде кода Java ниже:
QLineSeries editedSeries = new QLineSeries(series);
Кстати, я удаляю элементы, редактирую и переупорядочиваю их из серий. Но, как я уже сказал, они нужны мне обоим.
EDIT:
Я попробовал ваши ответы, но, по-моему, лучше всего написать код. Это проект, сделанный неким сотрудником, который сменил работу, поэтому это не мой код, как я сказал, я не знаю C ++.
chartwidget.h
void fillAreaSeries();
//...
QHash<QString,QLineSeries*> lineSeriesEntersMap;
QHash<QString,QLineSeries*> lineSeriesExitsMap;
chartwidget.cpp
void ChartWidget::fillAreaSeries() {
foreach (QLineSeries* seriesEnter, lineSeriesEntersMap.values())
{
if (lineSeriesExitsMap.contains(seriesEnter->name())) {
QLineSeries* seriesExit = lineSeriesExitsMap.value(seriesEnter->name());
if (!((seriesEnter->points().size() == 1) && (seriesExit->points().size() == 1))) {
for(int i = seriesEnter->points().size() - 1; i > 0; i--)
{
if (seriesEnter->points().at(i - 1).y() > seriesEnter->points().at(i).y())
{
seriesEnter->removePoints(i, 1);
}
}
for (int i = seriesExit->points().size() - 1; i > 0; i--)
{
if (seriesExit->points().at(i - 1).y() < seriesExit->points().at(i).y())
{
seriesExit->removePoints(i-1, 1);
}
}
QVector<QPointF> editPoints = seriesExit->pointsVector();
std::sort(editPoints.begin(),editPoints.end(), [] (const QPointF & p1, const QPointF & p2)
{
return p1.y() < p2.y();
});
seriesExit->replace(editPoints);
qDebug() << "__Swap:__";
qDebug() << seriesEnter->points().at(0).y();
qDebug() << seriesExit->points().at(0).y();
qDebug() << seriesEnter->points().at(1).y();
qDebug() << seriesExit->points().at(1).y();
QAreaSeries* series = new QAreaSeries(seriesEnter, seriesExit);
series->setName(seriesEnter->name());
series->setOpacity(0.50);
series->setPen(Qt::NoPen);
series->setPointLabelsFormat(seriesEnter->name().split("-").at(0));
areaSeriesMap.insert(series->name(), series);
}
}
}
}
Редактировать 3:
Итак, QLineSeries содержит список QPointF. У меня есть код ниже:
foreach (QLineSeries* seriesEnter, lineSeriesEntersMap.values())
{
QLineSeries* entersToBeEdited = new QLineSeries(chart);
entersToBeEdited->setName(seriesEnter->name());
entersToBeEdited->points().append(seriesEnter->points());
//...
append не работает и возвращает 0 баллов. Но я могу установить имя. Я также попытался добавить, просматривая элементы и добавляя их к
entersToBeEdited->points().push_back(seriesEnter->points().at(i));
и до сих пор ничего. Я также попробовал <<
и +=
, но не повезло.