Qt-Creator에서 만들고 편집 한 Qt 위젯 응용 프로그램이 있습니다.권장되는 QDialog 인스턴스가있는 이유는 무엇입니까?
기본 창 (MainWindow 클래스)에는 작은 대화 상자 (설정 용 텍스트 또는 위젯 포함)를 여는 버튼이있는 메뉴 모음이 있습니다.
새 "창"을 만들려면 Qt-Creator에서 "새 파일 만들기"대화 상자를 열고 필요한 헤더, 소스 및 ui 파일 (dialogabout.h, dialogabout.cpp)을 만드는 Qt 디자이너 양식 클래스를 선택하십시오. , dialogabout.ui).
나는 docs과 함께 수행하면, 그때 그렇게 같이 인 QDialog를 엽니 다
QDialog * widget = new QDialog;
Ui::DialogAbout about_ui;
about_ui.setupUi(widget);
widget->exec();
이 작동하지만 새로운 대화의 인스를 수정하면 가까운 신호에 푸시 버튼을 연결, 연결 문을 (다른 코드와 함께) 결코 도달하지 않습니다.
DialogAbout::DialogAbout(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogAbout)
{
ui->setupUi(this);
qDebug() << "I'm alive!"; // No output happens
connect(ui->pushButton_close, SIGNAL(clicked(bool)), this, SIGNAL(please_close())); // No signal created on pushbutton click.
}
은 내가 명시 적으로 widget = new DialogAbout(this)
을하지 않은 때문이라고 생각한다. 대신에 새로운 대화 상자를 다른 방법으로 인스턴스화하면 :
DialogAbout * newwindow;
newwindow = new DialogAbout(this);
newwindow->exec();
그런 다음 connect 문과 qDebug가 작동합니다.
제 질문은 대화 상자를 만드는 데 권장되는 문서에서 벗어난 함정은 무엇입니까? 이전 인스턴스화 방법으로이 기능을 사용할 수있는 방법이 있습니까?
please_close()는 SIGNAL 또는 SLOT입니까? – rflobao