通过Qt开发电子报表软件,在打印问题上遇到难题,参考网上的方法,很少,几乎没有相关的解决方法!只有自力更生了,结合QT自带实例spreadsheet, 打印只能实现当前页的打印,并不能实现分页,分区域打印。
void PrintView::print(QPrinter *printer)
{
#ifndef QT_NO_PRINTER
resize(printer->width(), printer->height());
render(printer);
}
例子上的函数如上, 看到render函数,是把当前tableview内容绘制到打印机上。灵感即来于此!整体思路是把tableview根据打印机尺寸划分打印区域,把打印区域分块绘制到打印机上,每个区域作为一页。
具体看代码:
1. 计算行页数,及每页起始行号及区域高度
void PrintView::CalcultPrintAreaRow(int h, int &pageCount, QVector &printAreaStartRow, QVector &printAreaHeight)
{
int pix_height = 0;
QAbstractItemModel *item_model = this->model();
if (item_model == NULL) return;
QHeaderView *headerView = this->horizontalHeader ();
if (headerView