QT打印QTableView超出纸张大小的剩余内容
时间: 2023-09-17 07:07:59 浏览: 131
qt打印功能
如果您想要在打印`QTableView`时,自动将超出纸张大小的内容打印到下一页,可以使用以下步骤:
1. 创建一个自定义的打印机类,继承自`QPrinter`。
2. 重写`QPrinter`的`newPage()`函数,以便在新页面上打印剩余内容。
3. 在`QTableView`的打印函数中,使用自定义的打印机类。
以下是一个示例代码:
```python
from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QTextDocument, QFontMetrics
from PyQt5.QtWidgets import QTableView, QAbstractItemView, QHeaderView, QDialog
class TablePrinter(QPrinter):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.currentPage = 0
self.remainingHeight = 0
def newPage(self):
super().newPage()
self.currentPage += 1
self.remainingHeight = self.pageRect().height()
def hasPage(self, page):
if page <= self.currentPage:
return True
return False
def remainingRect(self):
rect = self.pageRect()
rect.adjust(0, -self.remainingHeight, 0, 0)
return rect
class TableViewPrinter:
def __init__(self, view: QTableView):
self.view = view
def print(self):
printer = QPrintDialog().printer()
if not printer:
return
tablePrinter = TablePrinter(printer)
painter = QPainter()
if not painter.begin(tablePrinter):
return
self.view.render(painter, tablePrinter.remainingRect(), self.view.viewport().rect())
self.view.verticalHeader().render(painter, tablePrinter.remainingRect(), QAbstractItemView.VisualRect)
self.view.horizontalHeader().render(painter, tablePrinter.remainingRect(), QAbstractItemView.VisualRect)
painter.end()
```
使用 `TableViewPrinter` 类打印 `QTableView`:
```python
view = QTableView()
# ...
printer = TableViewPrinter(view)
printer.print()
```
这将弹出一个打印对话框,允许您选择打印机和其他打印选项。选择打印后,`QTableView` 将被绘制在打印机上,并自动分页。
阅读全文