如何以简单的方式更改堆上 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 数组中包含的对象的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式设置或更改具体单元格的值?

在普通 for 循环中更改 QVector 的对象

返回 QVector 的最佳方式

Qvector 怎么定义二维字符串数组?

多维数组的Qt QVector

我如何以这种方式计算字符串数组