0

問題があります。main() で次のように QDialog を呼び出しています。

app.setQuitOnLastWindowClosed(true);
splashWin startWin;

if(!startWin.exec())
{
    // Rejected
    return EXIT_SUCCESS;
}

// Accepted, retrieve the data
startWin.myData...

QDialog には次のコードがあります。

splashWin::splashWin(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::splashWin)
{
    ui->setupUi(this);
    this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
    this->setAttribute(Qt::WA_QuitOnClose);
}

void splashWin::on_OK_clicked()
{
    // Prepare my data
    ..


    accept();
}


void splashWin::show_About_Window()
{
    MyAboutWindow win;
    setVisible(false); // <- this causes the application to send a "reject" signal!! why??
    win.exec();
    setVisible(true);
}

これは非常に単純なコードですが、問題は次のとおりです。 setVisible(false) または hide() の行に about ウィンドウが表示されますが、そのウィンドウが閉じられるとすぐに「拒否」ダイアログ コードが送信され、実行中のアプリケーションが終了します。

// Rejected
return EXIT_SUCCESS;

main() の行

何故ですか?ドキュメントでは、 hide() は何も返してはならないことを読みました。私はQt 4.8.2を使用しています

4

1 に答える 1

1

QDialog::setVisible(false)QWidget::setVisibleはそれ自体のイベント ループを中断しますが、その動作を回避するために、代わりに関数の基本クラス バージョンを明示的に呼び出すことができます。

void splashWin::show_About_Window()
{
    MyAboutWindow win;
    QWidget::setVisible(false);
    win.exec();
    setVisible(true);
}
于 2012-07-29T23:18:44.000 に答える