使用渲染方法打印QTableView

Printing QTableView using render method

本文关键字:打印 QTableView 方法      更新时间:2023-10-16

我正在尝试打印一个表视图。为了填充表格视图,我创建了自己的模型。要打印表格,我正在执行以下操作:

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参数可能会有所帮助,但事实并非如此。有什么建议可以解决这个问题吗?

好的,这是我的解决方案。很高兴听到你的意见。

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);

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