关于QT的打印相关

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值