使用render方法打印QTableView

时间:2012-03-19 11:54:05

标签: c++ qt pdf-generation

我正在尝试打印表格视图。为了填充表格视图,我创建了自己的模型。要打印表我正在做以下事情:

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文件,在那里我只能看到表格的一小部分。我认为改变 region 参数可能有所帮助,但事实并非如此。有任何建议如何解决这个问题?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您可以尝试void QPrinter::setResolution ( int dpi )强制每台打印机的小部件像素数英寸,从而有效地缩放打印输出中的小部件。