2017-12-26 10 views
0

qt가 매우 새로워서 자식 대화 상자가있는 데스크톱 응용 프로그램을 열려고 시도하고 있습니다. 버튼은 부모 대화 상자를 가리 킵니다. 나는 그럭저럭 할 수 있었다. 그러나 내가 그것을 달리게하고, 'go'을 클릭 할 때마다, 그것은 나의 부모님의 창문에 나를 가리키고, 그 다음 부서진다! 나는 this link에서 코드를 얻었습니다. 첫 번째 대답은 작동하도록 한 것이었고 두 번째 응답은 전혀 작동하지 않았습니다. 내 MainWindow (부모) 대화 상자가 설문 조사이고 내 자식 대화 상자가 전역입니다. (나는 그들이 이상한 이름을 지었다는 것을 안다.시작하는 자식 대화 상자를 닫고 부모 대화 상자로 들어가면 Qt 데스크톱 응용 프로그램이 계속 충돌합니다.

내 MAIN.CPP

#include "survey.h" 
#include <QApplication> 
#include "global.h" 


int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 


    QWidget survey; 
    survey.show(); 
    global popup(&survey); 
    popup.show(); 



/* 
    survey w; 
    w.show(); 
*/ 
    return a.exec(); 
} 

내 global.cpp

#include "global.h" 
#include "ui_global.h" 
#include "survey.h" 

global::global(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::global) 
{ 
    ui->setupUi(this); 
} 

global::~global() 
{ 
    delete ui; 
} 



void global::on_Go_clicked() 
{ 

    //survey *nWin; 


    auto win = new survey(); 
    win->setAttribute(Qt::WA_DeleteOnClose); 
    win->show(); 
    deleteLater(); 

} 

내가 그것을 실행하면 내 데스크톱 응용 프로그램이 충돌하지 않는 그래서 변경해야합니까?

+0

[mcve]를 제공해야하며 현재 코드는 제공하지 않습니다. 간격이 많이 있습니다. – eyllanesc

답변

3
당신은 new 인스턴스화하지 않은 global 인스턴스에 deleteLater를 호출하고

, 그것은 당신의 main에 있어요 :

delete가 호출
global popup(&survey); 

, 응용 프로그램이 충돌합니다.

슬롯에 deleteLater 번으로 전화 할 필요가 없습니다.