Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用渲染方法打印QTableView_C++_Qt_Pdf Generation - Fatal编程技术网

C++ 使用渲染方法打印QTableView

C++ 使用渲染方法打印QTableView,c++,qt,pdf-generation,C++,Qt,Pdf Generation,我正在尝试打印表视图。为了填充表格视图,我创建了自己的模型。要打印表格,我将执行以下操作: QPrinter printer; QPrintDialog printDialog( &printer, 0); if( QDialog::Accepted == printDialog.exec() ) { if( QPrinter::Landscape != printer.orientation() ) { printer.setOrientation(QPrin

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

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 );
    }
}
QPrinter打印机;
QPrintDialog打印对话框(&printer,0);
如果(QDialog::Accepted==printDialog.exec()){
if(QPrinter::横向!=printer.orientation()){
打印机设置方向(QPrinter::横向);
}
QPoint startPoint=QPoint(20,20);
QRegion printRegion=QRegion(20,20,printer.paperRect().width(),printer.paperRect().height());
对于(int i=0;irender(&printer、startPoint、printRegion、QWidget::DrawChildren);
}
}

问题是我正在打印成PDF文件,在那里我只能看到表格的一小部分。我认为更改区域参数会有所帮助,但事实上并非如此。如何解决此问题的任何建议?

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

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

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