2012-03-26 25 views
0

過程中,我有以下代碼:對話框的內容丟失時用while循環運行

void Processmethod() 
{ 

    QDialog *ProcessMessage = new QDialog;  
    Ui::DialogProcessMessage Dialog;    
    Dialog.setupUi(ProcessMessage);    
    ProcessMessage->setModal(true); 
    ProcessMessage->setAttribute(Qt::WA_DeleteOnClose); 
    ProcessMessage->show(); 

    processmethodONE(); 
    processmethodTWO(); 
    processmethodTHREE();     
} 

void processmethodONE() 
{ 
    QString ProcessCommand = "w8 " + blablubli";    

    Prozess.setWorkingDirectory(Path);   //QProcess "Prozess" is globaly defined 
    Prozess.setStandardOutputFile(Path);  //in my class 
    Prozess.start(ProcessCommand); 


while(!Prozess.waitForFinished(2000)) 
    { 
     qApp->processEvents(); 
     std::cerr << "Process running " << std::endl; 
    } 

QProcess::ExitStatus Status = Prozess.exitStatus(); 

if (Status == 0) 
{ 
    std::cout << "File created!" << std::endl; 
} 
} 

所以,我的概率是,對話內容是缺少某種原因。在對話框中我有一些文字和一個按鈕。我只想在彈出對話框和進程運行時看到該內容。任何解決方案或想法如何實現?問候

+0

while循環凍結了UI線程 - 因此您不能有任何響應式UI,無論是主對話框還是進度對話框。刪除while循環並使對話框模式禁用用戶輸入的主UI。 – 2012-03-26 14:57:20

+0

請參閱http://stackoverflow.com/questions/1386043/how-to-make-qt-work-when-main-thread-is-busy – 2012-03-26 15:00:29

+0

嗨,我編輯了我的問題。也許你可以回答這個新問題。我只想顯示對話框的內容,所以只要顯示對話框的內容,一切都可以。 – Streight 2012-03-26 21:48:34

回答

0

我現在在while循環中使用了qApp->processEvents();。對話內容不會立即出現,但至少在大約5-10秒之後,對我來說至少可以。問候和thx的支持。

1

嘗試使用EXEC()的QDialog的,而不是秀()如此方法將服務模式窗口的目的。

這也可以解決你的問題。 QPushButtons和QLabels(按鈕和文本)缺失,這可能是您的佈局或對話框窗口大小的問題(嘗試使它變大)。 (選項菜單 - >表格編輯器 - >預覽)。

+0

exec()阻止進程,直到關閉對話框,這不是我的意圖。此外,QTDesigner中的預覽工作正常:)。 – Streight 2012-03-26 19:11:46