2012-05-23 203 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格式,並且可以將其打印出來。 –