2012-05-23 202 views
3

我试图打印QTableView的内容到打印机。我实现了底部脚本,并且它没有任何错误地成功运行。但是printPreview中的所有数据都是不寻常的。这是我的问题pic - FOUNTAINpyqt打印预览QTableView

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

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

+0

'++ x'不符合你在python中的想法。基本上它什么都不做。除此之外,没有一个最小的工作例子就很难说。 – mata

回答

1

如果你使用C++,我会建议使用专业的报告工具。可用的选项是KDAB reporting toolNocisoft NC Report。 AFAIK没有用于PyQt的可靠报告库...

+0

我同意一般观点,试图屏幕抓取和小部件的图像不是一个很好的方式来解决这个问题。我之前使用过QTextDocument类来处理这类事情。生成表格是件杂事,但您可以非常轻松地将输出导出为HTML或PDF格式,并且可以将其打印出来。 –