I suppose you have two options. Either you will have to do some calculation before hand so that you know how many rows and columns fit to one page and then request the table to paint a certain range of rows and columns to the specified area. Another option is to pass the whole QPrinter instead of just QPainter and do the calculations inside table's printing method where QPrinter::newPage() is invoked when appropriate.