在 Qt 中,我正在尝试设置自己的 QWidget,因此由于内存管理和其他事情,一切都应该正常工作。但我似乎无法用指针、堆和堆栈来解决问题。我有我的小部件 MyWidget,它有一个带有一些对象的 QList。我无法弄清楚如何正确设置所有内容。
您可以在下面看到我的代码,对此我有一些疑问:
instace 变量列表是在堆上创建的,在栈上创建会更好吗?
在我的列表中,我有指针,在堆栈上创建对象并将其附加到列表中会更好吗?(所以我在列表中根本没有指针)
当我将对象附加到列表时,它们会自动将列表作为其父级吗?那么当我删除列表时,列表中的所有对象都会被删除吗?
我尝试使用的 for each 循环不起作用,我得到“此操作需要指针/数组类型而不是 'int'”
在我的代码中,我想创建其他小部件,将列表中的对象作为参数。这是像我一样做的正确方法吗?MyOtherWidget 的实例方法如下所示: MyOtherWidget(MyObject *myObject, QWidget *parent)
谢谢你的帮助!我是 Qt 和 C++ 的新手,所以如果你能引导我朝着正确的方向前进,那就太好了。我怎样才能以正确的方式设置它以使其变得容易,不要出现内存泄漏并根据需要使用尽可能少的内存。你将如何设置相同的东西?
这是我的代码:
MyWidget.h:
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = 0);
~MyWidget();
private:
QList<MyObject*> *list;
};
我的小部件.cpp:
MyWidget::MyWidget(QWidget *parent)
{
ui.setupUi(this);
list = new QList<MyObject*>();
for (int i = 0; i<10; i++)
{
MyObject *myObject = new MyObject("Hello",this);
list->append(myObject);
}
foreach(MyObject *myObject, list)
{
//Lets say I want to create other widgets here and that they takes a MyObject as a parameter
MyOtherWidget *myOtherWidget = new MyOtherWidget(myObject,this);
}
}
MyWidget::~MyWidget(){
delete list;
}