qt qwt QwtPlotCurves 的 QList
Posted
技术标签:
【中文标题】qt qwt QwtPlotCurves 的 QList【英文标题】:qt qwt QList of QwtPlotCurves 【发布时间】:2012-05-10 10:44:33 【问题描述】:我想制作一个 QwtPlotCurve 的 QList。这样做的原因是以后能够从我的 QwtPlot 中删除它们。 我有以下代码:
QList<QwtPlotCurve> myList = new QList<QwtPlotCurve>;
QwtPlotCurve* curve1 = new QwtPlotCurve();
QwtPlotCurve* curve2 = new QwtPlotCurve();
curves->append(curve1);
curves->append(curve2);
代码无法编译,编译器输出:
错误:请求从“QList”转换为非标量类型“QList”
错误:没有匹配函数调用 'QList::append(QwtPlotCurve
注意:候选人是:
注意: void QList::append(const T&) [with T = QwtPlotCurve]
注意:没有已知的参数 1 从 'QwtPlotCurve*' 到 'const QwtPlotCurve&' 的转换
注意: void QList::append(const QList&) [with T = QwtPlotCurve]
注意:没有已知的参数 1 从 'QwtPlotCurve*' 到 'const QList&' 的转换
...
我说 QwtPlotCurve 应该是恒定的,但我不知道如何处理它。 我也不知道将曲线存储在 QList 中然后(根据用户需求)从图中删除是否是正确的方法。
在 sjwarner 的回答之后,我尝试了以下方法:
QList<QwtPlotCurve*> curves;
QwtPlotCurve* curve1 = new QwtPlotCurve();
QwtPlotCurve* curve2 = new QwtPlotCurve();
curves->append(curve1);
curves->append(curve2);
我收到以下错误:
错误:“->”的基本操作数具有非指针类型“QList” 错误:“->”的基本操作数具有非指针类型“QList”
我通过以下方式理解此错误: 曲线是一个 QList,它应该是一个指向 QList 的指针。
如果我尝试:
QList<QwtPlotCurve*>* curves = new QList<QwtPlotCurve*>;
QwtPlotCurve* curve1 = new QwtPlotCurve();
QwtPlotCurve* curve2 = new QwtPlotCurve();
curves->append(curve1);
curves->append(curve2);
它工作正常。 我要看看 sjwarner 指出的“隐式共享”,以摆脱“新”运算符。
【问题讨论】:
您在堆栈上声明 QList你有两个问题:
正如上面 Kamil Klimlek 所评论的,您正在堆栈上声明您的 QList
对象,然后尝试在堆上分配它 - 因为 new
返回指向您所使用的对象类型的指针 new
ing ,因此您实际上是在尝试执行以下操作:
QList<T> = *QList<T>
顺便说一句:您很少需要将new
与QList
分开,因为Qt 为它的所有容器类实现了隐式共享 - 简而言之,您如果其他地方需要包含的数据,可以自信地将所有 Qt 容器(和plenty of other classes besides)声明为堆栈对象和按值传递 - Qt 将处理所有内存效率和对象清理。
阅读this了解更多信息。
您正在声明对象的QList
并尝试用指向对象的指针填充它。您需要决定是否希望您的 QList
包含数据副本:
QList<QwtPlotCurve> curves;
QwtPlotCurve curve1();
QwtPlotCurve curve2();
curves.append(curve1);
curves.append(curve2);
或者您是否想在堆上分配 QwtPlotCurve
s 并将指向它们的指针存储在 QList
中:
QList<QwtPlotCurve*> curves;
QwtPlotCurve* curve1 = new QwtPlotCurve();
QwtPlotCurve* curve2 = new QwtPlotCurve();
curves.append(curve1);
curves.append(curve2);
【讨论】:
请查看我修改后的问题。 您对错误的理解是完全正确的 - 我已经稍微修改了我的答案;-)以上是关于qt qwt QwtPlotCurves 的 QList的主要内容,如果未能解决你的问题,请参考以下文章