2014-12-08 5 views
1

지금 내가 할 수있는 : 심지어 닫고있다/무료 개체를 삭제하기 위해 가입하는기본 폼을 차단하지 않고 대화 상자를 만드는 방법은 무엇입니까?

void MainWindow::on_actionPATH_triggered() { 
    std::unique_ptr<QDialog> win(new QDialog()); 
    win->exec(); 
} 

나는 주 창을 차단하는 별도의 threadto 피할에서 실행 async을/사용해야 또는 방법은 무엇입니까?

+0

모달을 변경하십시오. –

+0

@ratchetfreak OP가 exec()를 사용하는 경우 의미가 없습니다. http://qt-project.org/doc/qt-5/qdialog.html#modal-prop – Chernobyl

답변

2

당신은 단지 show()

void MainWindow::on_actionPATH_triggered() { 
    QDialog* win = new QDialog(); 
    //needed connect 
    win->setAttribute(Qt::WA_DeleteOnClose);//we don't want memory leak 
    win->show(); 
} 

를 사용하고 doc에서

win->setModal(false);//but it is default option, you don't need to change it 

사용할 수 있습니다 기본적으로

이 속성은()와 같은 대화 상자를 팝업 허위 쇼모덜리스. 속성을 true로 설정하면 QWidget :: windowModality를 Qt :: ApplicationModal로 설정하는 것과 같습니다. exec()는이 속성의 값을 무시하고 대화 상자를 항상 모달로 표시합니다.

Qt::WA_DeleteOnClose 사용자가 대화 상자를 닫을 때 해당 대화 상자가 삭제됩니다. 또한 대화에 부모를 설정할 수 있습니다

:

QDialog* win = new QDialog(this); 

이 경우 win에서 당신의 MainWindow를 함께 삭제됩니다.

Info about Qt parent child relationship

그리고 당신은 여기에 별도의 스레드를 필요로하지 않습니다.

관련 문제