PDA

View Full Version : pyqt print preview QTableView



iraj_jelo
23rd May 2012, 09:44
I'm trying to print the contents of a QTableView to the printer . i implement bottom script and it run successfully without any error. but all data are Unusual in printPreview. this is pic (http://img4up.com/up2/75917679167425743216.png)from my problem -FOUNTAIN (http://www.qtcentre.org/threads/3796-QTableView-printing?highlight=Qprinter)



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



if you have any example that can help me please tell me . thank you so much