PyQt打印预览QTableView

3

我想将QTableView的内容打印到打印机上。我实现了底部的脚本,没有出现任何错误,但是在打印预览中,所有数据都不正常。这是我的问题的图片 - FOUNTAIN

def printTable(self,printer,painter,area):
    model = self.model
    myTableView = self.view
    printer = painter 
    rows = model.rowCount();
    columns = model.columnCount();
    totalWidth = 0.0;
    totalPageHeight = 0.0;
    totalHeight = 0.0;
    for c in range(columns):
        totalWidth += myTableView.columnWidth(c)

    for p in range(45):
        totalPageHeight += myTableView.rowHeight(p);

    for r in range(rows):
        totalHeight += myTableView.rowHeight(r);

    xscale = area.width() / totalWidth;
    yscale = area.height() / totalHeight;
    pscale = area.height() / totalPageHeight;
    painter.scale(xscale, pscale);
    painter.translate(area.x() + xscale, area.y() + yscale);

    x=0
    #QStyleOptionViewItem option;

    for r in range(rows):
        ++x
        for c in range(columns):
            idx = model.index(r,c);
            option = myTableView.viewOptions();
            option.rect = myTableView.visualRect(idx);
            if r % 2 == 0:
                brush= QtGui.QBrush(QtGui.QColor(220, 220, 220), QtCore.Qt.SolidPattern);
                painter.fillRect(option.rect, brush);
            myTableView.itemDelegate().paint(painter, option, idx);

        if (x == 45):
            ok = printer.newPage();
            x=0;
            painter.translate(0, -1350);

####################### Now print Table ######################

printer = QtGui.QPrinter()
painter = QtGui.QPainter()
painter.begin(printer )
self.printTable(printer,painter, printer.pageRect())

如果您有任何可以帮助我的例子,请告诉我。非常感谢。

在Python中,“++x”并不像你想的那样起作用,基本上它什么也不做。除此之外,如果没有一个最小工作示例,很难说清楚。 - mata
1个回答

1

如果您正在使用C++,我建议使用专业的报表工具。可用选项包括KDAB报表工具Nocisoft NC Report。据我所知,PyQt没有可靠的报表库...


我同意这个观点,试图通过屏幕截取小部件的图像并不是一个很好的方法。我以前使用过QTextDocument类来处理这种情况。生成表格是一项繁琐的任务,但你可以将输出导出为HTML或PDF,并且打印也非常容易。 - Simon Hibbs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接