2012-06-15 3 views
0

내가하고 싶은 일은 테스트를 설정하는 페이지 집합을 표시하는 것입니다. 모든 세부 사항이 정확하면 사용자는 Commit을 누르고 다음 마법사 페이지가 표시되어 일련의 테스트를 즉시 실행합니다. 사용자에게 표시하고 사용자를 완료 한 후 다음을 클릭 할 수 있습니다.한 번 이상 호출 된 showEvent() - 의도적입니까?

나는 다음을 알고 있습니다. 다음은 단순히 isComplete()에 false를 반환하는 경우이며 이는 구현 된 것입니다. 그래서, 위젯이 디스플레이 된 직후에 호출되는 함수를 사용하고 싶습니다. 그래서 사용하고자하는 함수로 저에게 지시 된 showEvent()을 사용했습니다.

내 테스트는 진행 상황 표시 줄을 테스트로 표시하므로 타이머를 사용하는 것입니다.

void RunTestWizardPage::showEvent(QShowEvent *event) 
{ 
    ui->statusEdit->setText("Running Tests"); 

    timer = new QTimer(this); 
    connect(timer, SIGNAL(timeout()), this, SLOT(update())); 
    timer->start(100); 
} 

void RunTestWizardPage::update() 
{ 
    static int i = 10; 

    ui->statusEdit->append("Running Tests..."); 

    ui->testProgress->setValue(i++); 

    if(i == 100) 
    { 
     i = 0; 
     timer->stop(); 
     complete = true; 
     emit completeChanged(); 
    } 
} 

그러나이 함수를 두 번 호출 할 나타납니다 (그리고 내 디버깅 트릭 수 있지만 나는 위젯 표시하기 전에 생각)와 같은이 타이머가 끝나지 않아 나는 생각 타이머 문제가 발생합니다. 나는 자발적 사건에 관한 문서에서 읽었지만, 함수에 대한 호출이 모두 자발적이지는 않다는 것을 알 수있다.

의도적으로 두 번 호출되고 있습니까? 그렇다면 어떻게 중지합니까? 아니면 다른 기능을 사용할 수 있습니까?

감사합니다.

답변

1

페이지를 표시하기 직전에 호출되는 QWizardPage::initializePage()이 있습니다.

+0

불행하게도이 함수는 페이지가 표시되기 전에 호출되므로 원하는 것을 수행하지 않습니다. 그러나 디버깅에서 윈도우가 완전히 표시되기 전에'showEvent'도 호출됩니다. – Firedragon

관련 문제