Khi tạo một GUI với C++ và Qt bạn có thể tạo một nhãn ví dụ như thế này:C++ - Tại sao tôi tạo các tiện ích này trên heap?
QLabel* label = new QLabel("Hey you!", centralWidgetParent);
Điều này tạo ra các đối tượng trên heap và sẽ ở lại đó cho đến khi tôi hoặc xóa nó bằng tay hoặc cha mẹ bị phá hủy. Câu hỏi của tôi bây giờ là tại sao tôi cần một con trỏ cho điều đó? Tại sao không tạo nó trên ngăn xếp?
//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");
Điều này làm việc tốt, tôi có thể thấy nhãn và nó không biến mất.
Chúng tôi sử dụng con trỏ trong C++ để cho phép nội dung nào đó tồn tại lâu hơn để chúng tôi có thể sử dụng đối tượng trong các phạm vi khác nhau. Nhưng khi tôi tạo một biến thành viên, nó sẽ không ở lại cho đến khi đối tượng bị phá hủy?
Chỉnh sửa: Có thể tôi không làm rõ điều đó đủ. Đây là lớp 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");
}
Hmm ... cũng có nghĩa là ít nhất là có ý nghĩa. Cảm ơn bạn. – Davlog