Qt之打印功能

Qt做多了没有人逃得过打印模板这个功能,有的话只是时候未到,注释都在代码里了,直接上代码了

1、获取打印机的名称

if(index == 1)
    {
        QPrinterInfo info;
        QStringList list = info.availablePrinterNames(); // 所有打印机名字
        ui->cB_print->clear();
        ui->cB_print->setEnabled(true);
        foreach (QString str, list) {
            ui->cB_print->addItem(str);
        }
    }
    else
    {
        QPrinterInfo info;
        QString name = info.defaultPrinterName(); // 默认打印机名字
        ui->cB_print->clear();
        ui->cB_print->setEnabled(false);
        ui->cB_print->addItem(name);
    }

2、预览

    QPrinter printer(QPrinter::HighResolution);
    //自定义纸张大小,特别重要,不然预览效果极差
    printer.setPageSize(QPrinter::Custom);
    printer.setPaperSize(QSizeF(600, 800),
                               QPrinter::Point);
    QPrintPreviewDialog preview(&printer, this);// 创建打印预览对话框
    
    preview.setMinimumSize(1000,600);
    /*
     * QPrintPreviewDialog类提供了一个打印预览对话框,里面功能比较全,
     * paintRequested(QPrinter *printer)是系统提供的,
     * 当preview.exec()执行时该信号被触发,
     * drawPic(QPrinter *printer)是自定义的槽函数,图像的绘制就在这个函数里。
     */
    connect(&preview, SIGNAL(paintRequested(QPrinter*)), SLOT(drawPic(QPrinter*)));
    preview.exec();

然后drawPic定义:
//在预览窗口显示图片
void MainWindow::drawPic(QPrinter *printerPixmap)
{
    QPixmap pix = QPixmap(800,600);
    //这个函数算是画模板的函数吧,毕竟打印时有模板的
    createPix(&pix);
    pix.save(sFilePix);
    //纵向:Portrait 横向:Landscape
    printerPixmap->setOrientation(QPrinter::Landscape);
    //获取界面的图片
    QPainter painterPixmap(this);
    painterPixmap.begin(printerPixmap);
    QRect rect = painterPixmap.viewport();
    int x = rect.width() / pix.width();
    int y = rect.height() / pix.height();
    //设置图像长宽是原图的多少倍
    painterPixmap.scale(x, y);
    painterPixmap.drawPixmap(0, 0, pix);
    painterPixmap.end();
}
void MainWindow::createPix(QPixmap *pix)
{
    QPainter *painter = new QPainter(this);
    painter->begin(pix);
    painter->setRenderHint(QPainter::Antialiasing, true);
    // 设置画笔颜色、宽度
    painter->setPen(QPen(QColor(255, 255, 255), 2));
    // 设置画刷颜色
    painter->setBrush(QColor(255, 255, 255));
    QRect rect(0,0,800,600);
    //整张图设置画刷白底
    painter->fillRect(rect,QColor(255, 255, 255));
    painter->drawRect(rect);
    //画数据部分的线条
    painter->setPen(QPen(QColor(0, 0, 0), 1));
    QVector<QLine> lines;
    lines.append(QLine(QPoint(50,50),QPoint(750,50)));//上边
    lines.append(QLine(QPoint(750,50),QPoint(750,550)));//
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值