私はのWindows7上Qt5を使用していると私は最近an interesting Qt example codeを見つけました。Qt:このクラスのデストラクタを記述するための正しい、安全な方法は何ですか?
基本的には、次のようになります。
ButtonWidget::ButtonWidget(const QStringList &texts, QWidget * parent)
: QWidget(parent)
{
signalMapper = new QSignalMapper(this);
QGridLayout * gridLayout = new QGridLayout;
for (int i = 0; i < texts.size(); ++i)
{
QPushButton * button = new QPushButton(texts[i]);
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(button, texts[i]);
gridLayout->addWidget(button, i/3, i % 3);
}
connect(signalMapper, SIGNAL(mapped(QString)), this, SIGNAL(clicked(QString)));
setLayout(gridLayout);
}
それは素晴らしく、有用な例であるが、それは私がButtonWidget
型のオブジェクトを削除したいだけの場合には...適切なデストラクタを持っていません、またはウィジェットを削除/追加できるようにコードをカスタマイズしたい場合コンストラクタで作成されたすべてのオブジェクトを削除する方法です(動的にはnew
を使用)。
私のアプローチは、プライベート変数QList<QPushButton*> list
を使用し、上記のlist
を使用して、デストラクタで(コンストラクタ内に)リストするためにすべての新しい割り当てボタンを追加し、それらを1つずつ削除することでした。しかし、それは幼稚園に近いアプローチのようです。
私はリストなしで、あなたの時間と忍耐をありがとう:)コンストラクタコードをいじってなくて、他の方法、それを行うには良い方法がなければならないと思います!
Qtのドキュメントを読んで、Qtが動的に割り当てられたオブジェクトをどのように管理するのかを理解する必要があります。 –