Почему окно не всплывает? - PullRequest
0 голосов
/ 21 марта 2012

У меня есть следующий исходный код:

    Processmethod()
{

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



    PROCESSES START                     
}

После того, как я хочу показать QDialog "ProcessMessage", есть три процесса QProcess, включенные в три различных следующих метода.Если я отключаю эти методы с помощью //, всплывающее окно выглядит нормально, но если я включаю методы, процессы работают нормально, но всплывающее окно не появляется.Есть идеи / решения?привет

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Ваше окно не отображается до тех пор, пока метод Process не вернется, потому что основной цикл приложения реализован в основной функции

int main(int argc, char *argv[])
{
        QApplication a(argc, argv);
        QDialog w; // or other window
        w.show();
        return a.exec(); // main app loop (all drawing procedures called from here
}

Таким образом, если вы вызываете ваш PROCESSES START, ничего не происходит, пока метод Process не вернется в QApplication :: exec ()

Вы можете запускать свои процессы в отдельном потоке и отправлять вам уведомление о ходе выполнения, внедряя сигналы \ слоты в режиме очереди

1 голос
/ 21 марта 2012

Диалоговое окно не может быть показано, пока выполнение вашего кода не завершится ProcessMethod(). Если вы используете QProcess синхронно (вызывая любой из методов waitForXXX), это вызовет возникшую проблему. Все, что удерживает основной поток, также может вызвать эту проблему.

...