所以,我有以下代码:
foreach (QLineSeries* series, lineSeriesMap.values())
{
// ...
}我将在这个循环中修改系列对象,我不想修改原始对象,而是创建一个新编辑的对象。我对C++和Qt非常陌生,所以我想要一些东西,如下所示:
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());
//...附加不工作,并返回0分。但我可以定个名字。我还尝试通过循环遍历项目并将其添加到
entersToBeEdited->points().push_back(seriesEnter->points().at(i));
但还是什么都没有。我也试过<<和+=,但没有运气。
发布于 2019-03-15 11:06:04
查看QLineSeries的类定义,我看不到复制实例以复制它的任何简单方法。因此,您必须首先创建一个新实例:QLineSeries editedSeries;,并在其中手动复制原始系列的内容。editedSeries.append(originalSeries.points());,因为一旦数据在QLineSeries对象中就不能修改,我建议在将数据添加到新图表之前,将其子类为QLineSeries或修改通过originalSeries.points()获得的QList<QPointF>。
发布于 2019-03-15 11:05:30
QLineSeries是不可复制的,所以你不能通过修改拷贝来做你想做的事情。您需要从头开始创建一个新的QLineSeries。
https://stackoverflow.com/questions/55180728
复制相似问题