所以,我在下面有这段代码:
foreach (QLineSeries* series, lineSeriesMap.values())
{
// ...
}
我将在此循环中修改系列对象,并且我不想修改原始对象,而是创建一个新的已编辑对象。我是C ++和Qt的新手,所以我想要下面的Java代码:
QLineSeries editedSeries = new QLineSeries(series);
我正在删除元素,顺便从系列中对其进行编辑和重新排序。但是,正如我所说的,我俩都需要。
编辑:
我已经尝试了您的答案,但是我认为最好的方法就是编写代码。这是由一些换工作的同事制作的项目,所以不是我的代码,因为我说我不了解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));
仍然没有。我也尝试过<<
和+=
,但是没有运气。
答案 0 :(得分:0)
QLineSeries
是不可复制的,因此您无法通过修改副本来执行所需的操作。您将需要从头开始创建新的QLineSeries
。
答案 1 :(得分:0)
看着QLineSeries的类定义,我看不到任何简单的方法来复制您的实例以进行复制。
因此,您将必须首先创建一个新实例:
QLineSeries editedSeries;
并手动复制其中的原始系列内容。
editedSeries.append(originalSeries.points());
由于一旦将数据放入QLineSeries
对象中就无法对其进行修改,因此我建议先将QLineSeries
子类化或修改通过QList<QPointF>
获得的originalSeries.points()
,然后再将其添加到新图表中