В Qt я пытаюсь настроить свой собственный QWidget, поэтому все должно работать хорошо из-за управления памятью и других вещей. Но я не могу понять все правильно с указателями, кучей и стеком. У меня есть виджет MyWidget, в котором есть QList с некоторыми объектами. Не могу понять как правильно все настроить.
Вы можете увидеть мой код ниже, и у меня есть несколько вопросов по этому поводу:
Список переменных instace создается в куче, не лучше ли создать его в стеке?
В моем списке есть указатели, было бы лучше просто создать объект в стеке и добавить его в список? (Чтобы у меня вообще не было указателей в списке)
Когда я добавляю объекты в список, они автоматически получают список в качестве своего родителя? Итак, когда я удаляю список, все объекты внутри списка будут удалены?
Цикл для каждого цикла, который я пытаюсь использовать, не работает, я получил «для этой операции ожидался тип указателя/массива вместо« int »»
В своем коде я хочу создать другие виджеты, которые принимают объект из списка в качестве параметров. Это правильный способ сделать это, как я? Метод экземпляра MyOtherWidget выглядит следующим образом: MyOtherWidget(MyObject *myObject, QWidget *parent)
Спасибо за вашу помощь! Я новичок в Qt и C++, поэтому было бы здорово, если бы вы могли направить меня в правильном направлении. Как я могу настроить это правильно, чтобы упростить задачу, избежать утечек памяти и использовать как можно меньше памяти. Как бы вы установили то же самое?
Это мой код:
Мой виджет.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;
}