Qtでは、独自のQWidgetをセットアップしようとしているので、メモリ管理などの理由ですべてが正常に機能するはずです。しかし、ポインター、ヒープ、スタックではうまくいかないようです。いくつかのオブジェクトを含むQListを持つウィジェットMyWidgetがあります。すべてを正しく設定する方法がわかりません。
あなたは私のコードを以下に見ることができます、そして私はこれに関していくつかの質問があります:
instace変数リストはヒープ上に作成されますが、スタック上に作成する方がよいでしょうか?
私のリストにはポインタがありますが、スタック上にオブジェクトを作成してリストに追加する方がよいでしょうか?(リストにポインタがまったくないようにするため)
オブジェクトをリストに追加すると、オブジェクトは自動的に親としてリストを取得しますか?リストを削除すると、リスト内のすべてのオブジェクトが削除されますか?
使用しようとしているforeachループが機能していません。「この操作では、「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;
};
MyWidget.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;
}