首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从指针引用C++创建新对象

从指针引用C++创建新对象
EN

Stack Overflow用户
提问于 2019-03-15 10:39:20
回答 2查看 137关注 0票数 0

所以,我有以下代码:

代码语言:javascript
复制
 foreach (QLineSeries* series, lineSeriesMap.values())
    {
        // ...
    }

我将在这个循环中修改系列对象,我不想修改原始对象,而是创建一个新编辑的对象。我对C++和Qt非常陌生,所以我想要一些东西,如下所示:

代码语言:javascript
复制
QLineSeries editedSeries = new QLineSeries(series);

顺便说一下,我正在删除元素,编辑并重新排序。但是,正如我说的,我需要他们两个。

编辑:

我试过你的答案,但我相信最好的方法是把密码。这是一个由一些同事做的项目,他换了工作,所以这不是我的代码,正如我说的,我不知道C++。

chartwidget.h

代码语言:javascript
复制
void fillAreaSeries();
//...
QHash<QString,QLineSeries*> lineSeriesEntersMap;
QHash<QString,QLineSeries*> lineSeriesExitsMap;

chartwidget.cpp

代码语言:javascript
复制
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列表。我有下面的代码:

代码语言:javascript
复制
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));

但还是什么都没有。我也试过<<+=,但没有运气。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-15 11:06:04

查看QLineSeries的类定义,我看不到复制实例以复制它的任何简单方法。因此,您必须首先创建一个新实例:QLineSeries editedSeries;,并在其中手动复制原始系列的内容。editedSeries.append(originalSeries.points());,因为一旦数据在QLineSeries对象中就不能修改,我建议在将数据添加到新图表之前,将其子类为QLineSeries或修改通过originalSeries.points()获得的QList<QPointF>

票数 0
EN

Stack Overflow用户

发布于 2019-03-15 11:05:30

QLineSeries是不可复制的,所以你不能通过修改拷贝来做你想做的事情。您需要从头开始创建一个新的QLineSeries

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55180728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档