2012-03-19 56 views
0

我想打印一個表格視圖。爲了填充表格視圖,我創建了自己的模型。要打印表我做如下​​:使用渲染方法打印QTableView

QPrinter printer; 
QPrintDialog printDialog(&printer, 0); 
if(QDialog::Accepted == printDialog.exec()) { 

    if(QPrinter::Landscape != printer.orientation()) { 
     printer.setOrientation(QPrinter::Landscape); 
    } 

    QPoint startPoint = QPoint(20, 20); 
    QRegion printRegion = QRegion(20, 20, printer.paperRect().width(),printer.paperRect().height()); 
    for(int i = 0; i < m_tables.size(); ++i) { 
     tableView->render(&printer, startPoint, printRegion, QWidget::DrawChildren); 
    } 
} 

的問題是,我打印成PDF文件,並有我能看到的只是表的一小部分。我認爲改變區域參數可能有幫助,但事實並非如此。任何建議如何解決這個問題?

+0

通過「我能看到的只是表的一小部分」,你的意思是在邊緣處被截斷,對不對? – Koying 2012-03-19 15:55:15

+0

對。我能夠看到幾個單元格和滾動條。 – besworland 2012-03-20 09:24:37

回答

2

好的,這是我的解決方案。很高興聽到你的意見。

PrintTableModel* pTableModel = new PrintTableModel(); 

QTableView* pTableView = new QTableView; 
pTableView->setModel(pTableModel); 

int width = 0; 
int height = 0; 
int columns = pTableModel->columnCount(); 
int rows = pTableModel->rowCount(); 

pTableView->resizeColumnsToContents(); 

for(int i = 0; i < columns; ++i) { 
    width += pTableView->columnWidth(i); 
} 

for(int i = 0; i < rows; ++i) { 
    height += pTableView->rowHeight(i); 
} 

pTableView->setFixedSize(width, height); 
pTableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
pTableView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 

此代碼幫助了我。要正確打印表格,你只可以執行渲染電話:

pTableView->render(printer); 
+0

你的解決方案很好,也解釋了這一點(http://blog.qt.digia.com/blog/2012/08/24/qt - 商業支持每週-25-打印大表-2 /)。同樣在這些鏈接中解釋了一種打印不符合(太多列或行)到一頁的方式。 – W55tKQbuRu28Q4xv 2013-11-22 10:11:49

0

您可以嘗試void QPrinter::setResolution (int dpi)來強制每個打印機英寸的數個小部件像素,從而有效地縮放打印件上的小部件。

+0

嗯,我試過了,但它沒有改變任何東西... – besworland 2012-03-20 13:13:44