如何以简单的方式更改堆上 QVector 数组中包含的对象的值?
Posted
技术标签:
【中文标题】如何以简单的方式更改堆上 QVector 数组中包含的对象的值?【英文标题】:How to change a value of an object which is contained in an QVector-array on heap in a simple way? 【发布时间】:2020-12-28 17:58:11 【问题描述】:修改 QVector 数组中包含的对象堆栈上可以这样完成
//widget.cpp
//extract from widget constructor:
QVector<MyClass> myClassObjectsStack;
myClassObjectsStack.push_back(MyClass());
int index = 0;
myClassObjectsStack[index].firstName = "Michael";
当 QVector 数组在堆上时,我现在通过三个步骤修改对象:
//widget.cpp
//extract from widget constructor:
myClassObjectsHeap = new QVector<MyClass>;
myClassObjectsHeap->push_back(MyClass());
// (1) Assigning myClassObjectBuffer the object which is on heap:
myClassObjectBuffer = myClassObjectsHeap->at(index);
// (2) Modifying value of buffer object
myClassObjectBuffer.firstName = "Ella";
// (3) Inserting buffer object at index position, like overwrite old object:
myClassObjectsHeap->insert(index, myClassObjectBuffer);
我可以用更简单的方式做到这一点还是这样合适??? 就像更改堆上的类对象一样非常简单:
myClassPtr = new MyClass;
myClassPtr->firstName = "Nelvyn";
有关信息:
// myclass.h
class MyClass
public:
QString firstName;
MyClass() firstName = "";
MyClass(QString nameValue) firstName = nameValue;
;
//widget.h
class Widget : public QWidget
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
QVector<MyClass> *myClassObjectsHeap;
MyClass *myClassPtr;
MyClass myClassObjectBuffer;
;
【问题讨论】:
【参考方案1】:你是这样做的:
(*myClassObjectsHeap)[index].firstName = "Ella";
您应该考虑改用std::vector
,因为它在各方面都更出色。你可以看到thistalk 是一个很好的讨论。
【讨论】:
不同意您的评论,即 std::vector 在各方面都优越:***.com/questions/5623218/…. @mzimmers 您链接的线程非常旧。 Qt 容器缺少很多功能。我找不到它,但我确信我看过 Qt 人最近的一次主题演讲,他们基本上说 Qt 容器是遗留的,只需使用 STL。 哦...有趣。感谢您的澄清。他们是指所有的 Qt 容器,还是仅仅指 QVector?我希望我能看到那个主题演讲。 @mzimmers 我找到了youtu.be/uZ68dX1-sVc?t=116。显然它不是由 Qt 公司官方提供的,所以值得一试。以上是关于如何以简单的方式更改堆上 QVector 数组中包含的对象的值?的主要内容,如果未能解决你的问题,请参考以下文章