質問

私は問題を抱えています、私は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ウィンドウを表示しますが、そのウィンドウが閉じられるとすぐに "Reject"ダイアログコードが送信され、私のアプリケーションは<の実行を閉じます。/ P>

// Rejected
return EXIT_SUCCESS;
.

メイン()

なぜそれがあるのですか?ドキュメントで私はそのhide()を返してはいけません。私はQT 4.8.2

を使っています

役に立ちましたか?

解決

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

void splashWin::show_About_Window()
{
    MyAboutWindow win;
    QWidget::setVisible(false);
    win.exec();
    setVisible(true);
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top