2015-06-17 101 views
1

我正在編寫一個應用程序,返回一個值與QWidget :: exec,但似乎我無法正確關閉類(我需要調用Gate ::〜門顯式刪除類)和QApplication :: exec永遠不會退出。 門是我aplication的主窗口QApplication不關閉後,我關閉所有QWidget

Gate::Gate(List *opciones, QWidget *parent): 
QDialog(parent), 
ui(new Ui::Gate) 
{ 
    ParseOption *ctmp; 
    int retvalue,i; 
    ui->setupUi(this); 
    validUser = false; 
    setAttribute(Qt::WA_QuitOnClose); 
    errno = 0; // no se de donde sale el error... 
    [...code...] 
    QObject::connect(ui->closeButton,&QAbstractButton::clicked,this,&QDialog::close); 
    QObject::connect(ui->passwordField,&QLineEdit::textChanged,this,&hellGate::enableopenButton); 
    QObject::connect(ui->openButton,&QAbstractButton::clicked,this,&hellGate::certificateUser); 
    QObject::connect(this,&hellGate::validateUser,this,&QDialog::done); 
} 

當MI程序調用:

emit validateUser(QDialog::Accepted); 

然後退出,但門在接近不調用析構函數,我稱這種現象主要而是用標誌WA_QuitonClose應該自動關閉:

int main(int argc, char *argv[]) 
{ 
    QWidgetList list; 
    QApplication a(argc, argv); 
    Gate w(configOptions); 
    if(w.exec() == QDialog::Accepted) { 
     w.~Gate(); 
     qDebug("enter"); 
    } else { 
     qDebug("No enter"); 
    } 
    list = a.topLevelWidgets(); 
    if(!list.isEmpty()) { 
     for(int i = 0;i<list.size();i++) { 
      qDebug("window: %i",list[i]->close()); 
     } 
    } else { 
     qDebug("ALL closed"); 
    } 
    return a.exec(); 
} 

輸出是「輸入」(和「如果我打電話給〜門」全部關閉「)。

我正在嘗試從程序退出行「return a.exec()」。 如果我沒有破壞門顯式a.topLevelWidget返回一個QWidget列表(我想這是門)。 我需要調用w.exec(),因爲我需要一個門返回值,w.show()是聲明:

void show(); 

我需要調用w.exec和a.exec結束時窗W (班級門)關閉。 我做錯了什麼?

P.D對不起,如果文字很難理解,我不太懂英語。

+0

是門應用程序的主窗口?你能否澄清爲什麼你需要明確地調用它的析構函數?通常你調用主窗口的show()然後exec()爲應用程序 – demonplus

回答

0

創建兩個事件循環:

  1. w.exec()
  2. a.exec()

第二個事件循環開始後關閉對話框,所以它會無限期地等待窗口被關閉。

您可以撥打show()的對話框或不使用QApplication的事件循環可言:

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    Gate w(configOptions); 
    if(w.exec() == QDialog::Accepted) 
    { 
     qDebug("enter"); 
    } 
    else 
    { 
     qDebug("No enter"); 
    } 
} 
+0

我需要QApplication,因爲Gate繼承自QDialog – JVM

+0

thne現在我強迫a.quit完成,因爲我需要w.exec返回值 – JVM

+0

這反應了爲什麼a.exec不會退出,但沒有我能如何正確執行我的程序。 – JVM