Qt QDialog مع إخفاء وWA_QuitOnClose
-
13-12-2019 - |
سؤال
لدي مشكلة، وأنا أتصل بـ QDialog الخاص بي بهذه الطريقة في main():
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) أو إخفاء() النافذة حول ولكن بمجرد تجاهل هذه النافذة، يتم إرسال رمز حوار "الرفض" ويغلق التطبيق الخاص بي لتنفيذ الأمر
// Rejected
return EXIT_SUCCESS;
الخطوط الرئيسية ()
لماذا هذا؟قرأت في الوثائق أن إخفاء () لا ينبغي أن يعيد أي شيء.أنا أستخدم كيو تي 4.8.2
المحلول
QDialog::setVisible(false)
يقاطع حلقة الحدث الخاصة به، ولكن يمكنك استدعاء إصدار الفئة الأساسية للوظيفة بشكل صريح، QWidget::setVisible
, ، بدلاً من ذلك لتجنب هذا السلوك:
void splashWin::show_About_Window()
{
MyAboutWindow win;
QWidget::setVisible(false);
win.exec();
setVisible(true);
}
لا تنتمي إلى StackOverflow