C++ と Qt で GUI を作成する場合、たとえば次のようなラベルを作成できます。
QLabel* label = new QLabel("Hey you!", centralWidgetParent);
これにより、ヒープ上にオブジェクトが作成され、手動で削除するか、親が破棄されるまでそこにとどまります。私の質問は、なぜそのためのポインターが必要なのですか? スタック上に作成しないのはなぜですか?
//Create a member variable of Class MainWindow
QLabel label;
//Set parent to show it and give a text so the user can see it
QWidget* centralWidget = new QWidget(this); //Needed to add widgets to the window
this->setCentralWidget( centralWidget );
label.setParent(centralWidget);
label.setText( "Haha" );
これは正常に機能し、ラベルが表示され、消えませんでした。
C++ ではポインターを使用して何かを長生きさせ、さまざまなスコープでオブジェクトを使用できるようにします。しかし、メンバー変数を作成すると、オブジェクトが破棄されるまで残りませんか?
編集:多分私はそれを十分に明確にしませんでした。これは MainWindow クラスです。
class MainWindow : public QMainWindow
{
Q_OBJECT
QLabel label; //First introduced here...
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
};
//Constructor
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QWidget* centralWidget = new QWidget(this);
this->setCentralWidget( centralWidget );
label.setParent(centralWidget);
label.setText( "Haha" );
}