我正在尝试打印表格视图。为了填充表格视图,我创建了自己的模型。要打印表我正在做以下事情:
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 参数可能有所帮助,但事实并非如此。有任何建议如何解决这个问题?
答案 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 )
强制每台打印机的小部件像素数英寸,从而有效地缩放打印输出中的小部件。