QT4 QgraphicsView не перерисовывается в цикле отображения многих страниц - PullRequest
1 голос
/ 01 августа 2011

Я написал программу для экспериментов с poppler pdf library. Я могу отобразить PDF-страницы в graphicsView с помощью метода:

void MainWindow::setPage(int newpage)
{

 pdfPage = document->page(newpage);
if (pdfPage == 0) {
  // ... error message ...
  return;
}

// Generate a QImage of the rendered page
image = pdfPage->renderToImage(100.0,100.0,0,0,pdfPage->pageSize().width(),pdfPage->pageSize().height());
if (image.isNull()) {
  // ... error message ...
  return;
}

pixmap=QPixmap::fromImage(image);
scene->clear();
scene->addPixmap(pixmap);
this->ui->graphicsView->setScene(scene);
this->ui->graphicsView->repaint(); //the same with show(), invalidate scene()
// after the usage, the page must be deleted
delete pdfPage;

}

с одним вызовом или в слоте для управления но если я напишу цикл, как для (i = 0; i <200; i ++) {setPage (i);} ничего не отображается, пока цикл не дойдет до конца, а затем видна только последняя страница. В чем дело? Я попытался с msleep (500) в пользовательском классе потока, и попытался также вызвать paintEvent для graphicsView. Может помочь? </p>

1 Ответ

0 голосов
/ 01 августа 2011

Вы не можете заставить виджет перерисовывать себя в цикле.Чтобы виджет (или графический элемент) мог рисовать сам себя, элемент управления должен возвращаться к циклу событий каждый раз, когда виджет виджета изменяется.Пожалуйста, см. этот вопрос и его ответы для получения дополнительной информации.

...