将对象添加到矢量

时间:2016-05-31 17:14:38

标签: c++ qt object vector qvector

这是我在这个网站上的第一个问题,但我会尝试涵盖所需的一切。如果我忘了什么就道歉。我在使用QT Creator时遇到了问题,但我认为使用Visual Studio或者一般只使用C ++会是一样的。

我有几个课程:Mainwindow,Track和AddForm。主窗口就是它的名字。主要形式。 Track是一个基于QObject的自定义类,它只包含一个QString变量(就目前而言,因为我还在尝试使用QT)。 AddForm是另一个表单的类,可以通过单击MainWindow表单中的按钮来创建。该表单只包含一个用于填充字符串的行编辑和一个表示" Add"的按钮。每当按下该按钮时,行编辑中的文本将被放入Track类的QString变量中。该QString变量被称为"艺术家"。

除了将行编辑中的文本分配给变量" artist"对于Track-object,表单还会发出一个发送整个对象的信号。主窗口中的一个插槽将对该信号做出反应并收集Track对象。到目前为止一切都很好。

这是我的问题。在我的mainwindow-header中,我创建了一个名为trackVector的私有QVector,然后我可以在mainwindow.cpp中调用它。我想要做的是使用该Track对象追加/ push_back QVector。有点像这样:

trackVector.push_back(trackObject);

构建应用程序时出现以下错误消息: click here for a screenshot

现在使用整数或任何其他变量,这非常简单。我想你会做这样的事情:

QVector<int> myVector;
myVector.push_back(3);

我认为无论何时附加QVector(或标准的非QT向量),都需要使用该类的构造函数。但是,我如何创建一个构造函数,您可以在其中放置一个已存在的对象?

请尽量用简单的单词解释,因为我不是母语为英语的人:)非常感谢!

1 个答案:

答案 0 :(得分:1)

您发布的代码不足(因此您的帖子可能会被关闭作为主题 - 这是SO上的经典初学者错误),但我想这里适当的解决方案是使用一些自动指针类型。如果您的TrackVector要保留Track个对象的所有权,那么最佳解决方案是std::unique_ptr<Track>元素:

std::vector<std::unique_ptr<Track>> TrackVector;
// filled like
TrackVector.emplace_back(new Track(args));

另一方面,如果所有权位于其他地方,您可以使用std::shared_ptr甚至是原始指针(前提是您的布局保证指向Track对象的生命周期超过{{{ 1}})。