2012-03-26 2 views
0

을 실행하는 동안과 공정 나는 다음과 같은 소스 코드를 가지고 :대화 상자의 내용이 없을 때 루프가

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를 비활성화하십시오. –

+0

참조 http://stackoverflow.com/questions/1386043/how-to-make-qt-work-when-main-thread-is-busy –

+0

안녕하세요, 다시 질문을 편집했습니다. 어쩌면 당신은 새로운 질문에 답을 줄 수 있습니다. 대화 상자의 내용을 표시하고 싶을 뿐이므로 대화 상자의 내용이 표시된 경우에만 모든 내용이 확인됩니다. – Streight

답변

0

지금은 루프 while 프로세스에서 qApp->processEvents();을 사용했습니다. 대화 내용은 즉시 나타나지 않지만 적어도 적어도 5 ~ 10 초 후에는 나에게 잘 들립니다. 인사말 및 지원을위한 thx.

1

봅니다() 대신 쇼의 인 QDialog ()이의 방법은 모달 윈도우의 목적을 제공합니다 간부를 사용합니다.

이렇게하면 문제가 해결 될 수도 있습니다. QPushButtons 및 QLabels (단추 및 텍스트)가 누락되었습니다. 레이아웃 또는 대화 상자 창 크기의 문제 일 수 있습니다 (크기를 크게 한 후에 시도하십시오).

미리보기 창에서 확인하십시오. (옵션 메뉴 -> 서식 편집기 -> 미리보기).

+0

exec()는 내 의도가 아닌 대화 상자가 닫힐 때까지 프로세스를 차단합니다. 또한 QTDesigner의 미리보기가 잘 작동합니다. – Streight

관련 문제