QT4 QgraphicsView不会在显示许多页面的“for循环”中重新绘制

时间:2011-08-01 14:24:44

标签: qt4 qgraphicsview repaint

我写了一个程序来试验poppler pdf库。 我可以使用方法将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;

}

单次调用或控件的插槽 但如果我写一个循环就好 for(i = 0; i< 200; i ++){setPage(i);} 在循环结束之前不显示任何内容,然后只显示最后一页。 怎么了? 我尝试在自定义线程类中使用msleep(500),并尝试为graphicsView调用paintEvent。 可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您无法使窗口小部件在循环中重绘自身。为了使窗口小部件(或图形项)自己绘制,每次窗口小部件的外观发生更改时,控件都必须返回到事件循环。有关详细信息,请参阅this question及其答案。