2011-08-01 63 views
1

我編寫了一個程序來實驗poppler pdf庫。 我能夠顯示PDF頁面與方法的graphicsView:QT4 QgraphicsView不會在顯示很多頁面的「for循環」中重新繪製

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;我< 200 ; i ++){setPage(i);} 直到循環結束時才顯示任何內容,然後只顯示最後一頁。 有什麼問題? 我嘗試用自定義線程類中的msleep(500),並嘗試爲graphicsView調用paintEvent。 可以幫忙嗎?

回答

0

您不能讓小部件在循環中重繪自己。爲了讓小部件(或圖形項目)自己繪製,控件必須在小部件外觀每次改變時返回到事件循環。請參閱this question及其答案以獲取更多信息。