سؤال

لدي مشكلة، وأنا أتصل بـ 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);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top