2

今のところ、私はできる:

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

メインウィンドウをブロックしないように別のスレッドで使用async/実行する必要がありますか、またはそこにあるオブジェクトを閉じて削除/解放するためにサブスクライブする方法はありますか?

4

1 に答える 1

3

あなたはちょうど使用することができます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();
}

と使用

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

ドキュメントから:

デフォルトでは、このプロパティは false で、show() はダイアログをモードレスとしてポップアップします。彼のプロパティを true に設定することは、QWidget::windowModality を Qt::ApplicationModal に設定することと同じです。exec() はこのプロパティの値を無視し、常にダイアログをモーダルとしてポップアップします。

Qt::WA_DeleteOnCloseユーザーがダイアログを閉じると、ダイアログが削除されます。

親をダイアログに設定することもできます。

QDialog* win = new QDialog(this);

この場合win、mainWindow で削除されます。

Qtの親子関係について

そして、ここで別のスレッドは必要ありません。

于 2014-12-08T17:32:23.490 に答える