void QCurveQueryTool::printview() //printFlag =2 , 打印预览
{
QPrinter printer(QPrinter::ScreenResolution);
QPrintPreviewDialog preview(&printer, this);
preview.setMinimumSize(1000,900);
connect(&preview, SIGNAL(paintRequested(QPrinter *)),this, SLOT(printTable(QPrinter *)));
preview.exec();
}
void QCurveQueryTool::printTable(QPrinter *printer)
{
QString title = QString("曲线打印");
printTableWidget(table,title,printer);
}
void QCurveQueryTool::printTableWidget(const QTableWidget* view,QString stitile,QPrinter *printer) //printFlag =1,打印表格
{
double totalWidth = 0.0;
double totalHeight = 0.0;
double totalPageHeight=0.0;
int rows = view->model()->rowCount(); //行总数
const int cols = view->model()->columnCount(); //列总数
for (int c = 0; c < cols; ++c) //求出列宽
{
totalWidth += view->columnWidth(c);
}
for (int r = 0; r < rows; ++r) //求出行宽
{
totalHeight += view->rowHeight(r);
}
QPainter painter(printer);
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
painter.begin(printer);
QRect area = printer->paperRect();// paperRect();
QVector<int> startRow;
QVector<int> endRow;
int iCount = 0;
qreal left,top,right,bottom;
printer->getPageMargins(&left,&top,&right,&bottom,QPrinter::Point);
cout << "left = " << left << ", right = " << right << ", top = " << top << ", bottom = " << bottom << endl;
area.setHeight( int(area.height() - top - bottom) );
area.setWidth( int(area.width() - left - right) );
for (int p=0; p < rows; p++) //rows中保存了所有的行数 , 找出每次打印的开始行和结束行
{
totalPageHeight += view->rowHeight(p); //求出所有的列高度
int pageFooter = 50 ; //页脚的高度
int pageHeader = 50; //页眉的高度
if (startRow.size() == 0)
{
pageFooter = 50 ;
pageHeader = 500;
}
if ((totalPageHeight >= (area.height() - pageFooter - pageHeader)) || (p == rows -1)) //如果目前累加列的高度大于或者等于可用页面高度 || 到达最后一行
{
totalPageHeight = view->rowHeight(p);
if (p == rows -1)
{
if (p - iCount - 2 < 0)
{
关于QT的打印相关
最新推荐文章于 2023-08-03 14:24:41 发布