QT QDIALOG hideとwa_quitonclose
-
13-12-2019 - |
質問
私は問題を抱えています、私は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);
}
. 所属していません StackOverflow