, 왜냐하면 만약 당신이 이들을 단순히 함수 안에서 만들면, 스택에서 생성되는 것보다 훨씬 더 간단하고, 함수가 리턴하거나 끝난 후에 그 함수에 대한 스택이 삭제된다는 것을 알아야하기 때문이다.).
#include <QDialog>
#include <QLineEdit>
#include <QLabel>
#include <QVBoxLayout>
그런 다음 민간 부분에 태그 변수를 추가 :
private:
QDialog *window;
QLineEdit *question;
QLabel *label;
QVBoxLayout *layout;
을하여 버튼의 클릭 이벤트 세트에서
당신이 당신의 창 관리자 헤더 파일에 사용하려는 클래스의 헤더를 포함 태그 변수를 만들고 UI 설정을 만듭니다.
void windowManager::addQuestionDialog()
{
window = new QDialog();
question = new QLineEdit();
label = new QLabel();
layout = new QVBoxLayout();
layout->addWidget(question);
layout->addWidget(label);
window->setLayout(layout);
window->resize(200,200);
window->setWindowTitle(QObject::trUtf8("Kérdés bevitele..."));
window->show();
}
또한 잊지 마세요. 이 태그 변수는 포인터이므로 여기에서 호출 함수의 경우 .
대신 ->
을 사용해야합니다. 또한 주소를 얻기 위해 &
연산자를 사용할 필요가없는 이유이기도합니다.
또한 C++이 자동으로 이러한 개체를 삭제하지 않기 때문에 이러한 개체를 삭제해야합니다. 너 delete
모두 new
해야합니다. 이 작업을 수행하기에 좋은 곳은 windowManager
클래스의 소멸자입니다. 태그 변수를 삭제하기 전에 태그 변수가 NULL
(객체가있는 경우)이 아닌지 확인하십시오. 그렇지 않으면 오류가 발생할 수 있습니다.
부모 포인터를 생성자의 매개 변수로 전달하는 것이 더 나은 해결책입니다. 따라서 부모가 소멸되면 자식도 삭제되므로 Qt는 부모 포인터를 생성자의 매개 변수로 전달합니다.
Qt가 이제는 계층 구조에서 나오기 때문에 (일부의 경우) 오브젝트를 어디에서 수동으로 설정할 필요가 없습니다. 이 경우
하여 버튼의 클릭 이벤트 함수가 다음과 같을 것이다 : 나는 라인을 변경했습니다
void windowManager::addQuestionDialog()
{
window = new QDialog(this);
question = new QLineEdit(window);
label = new QLabel(window);
layout = new QVBoxLayout(window);
//The following two lines are optional, but if you don't add them, the dialog will look different.
layout->addWidget(question);
layout->addWidget(label);
window->resize(200,200);
window->setWindowTitle(QObject::trUtf8("Kérdés bevitele..."));
window->show();
}
:는 QWidget * 창 = 새로운는 QWidget (부모); 및 window-> setAttribute (Qt :: WA_DeleteOnClose); 그러나 여전히 보여지지 않습니다. – erbal