Qt5打印功能示例代码
来源:互联网 发布:单片机开发板有什么用 编辑:程序博客网 时间:2024/06/18 09:42
Date: 2016-6-15
Author: kagula
Introduction:
一个简单的打印和打印预览示例代码。
Environment:
[1]Windows 7 64bits
[2]Qt Creator 3.6.1
[3]Qt 5.6
头文件
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>namespace Ui {class MainWindow;}class QPrinter;class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private: Ui::MainWindow *ui;private slots: void OnTestPrint(); void OnTestPrintPreview(); void printDocument(QPrinter *printer);};#endif // MAINWINDOW_H
源文件
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QMessageBox>#include <QDebug>#include <QPrinter>#include <QPrintDialog>#include <QPrintPreviewDialog>#include <QPainter>/* * Qt5打印支持 QT += printsupport * */MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); //打印 connect(ui->pbTestPrint,SIGNAL(released()),this,SLOT(OnTestPrint())); //打印预览 connect(ui->pbTestPrintPreview,SIGNAL(released()),this,SLOT(OnTestPrintPreview()));}MainWindow::~MainWindow(){ delete ui;}void MainWindow::OnTestPrint(){ QPrinter printer(QPrinter::HighResolution); QPrintDialog dialog(&printer, this); if (dialog.exec() != QDialog::Accepted) return; //默认为零,如果用户选择了打印范围,以1为基数。 //printer.fromPage(); //printer.toPage(); //设置打印范围,以1为基数。 //printer.setFromTo(1, LastNumberOfPage); qDebug("The user has choiced printer."); printDocument(&printer);}//测试打印预览功能void MainWindow::OnTestPrintPreview(){ QPrinter printer(QPrinter::HighResolution); QPrintPreviewDialog preview(&printer, this); connect(&preview, SIGNAL(paintRequested(QPrinter*)), this, SLOT(printDocument(QPrinter*))); preview.exec();}void MainWindow::printDocument(QPrinter *printer){ //http://doc.qt.io/qt-5/qpainter.html QPainter painter; painter.begin(printer); QString family("Arial"); QString style("Normal"); // QFont font(family, 32, 50, false); font.setStyleName(style); font = QFont(font, painter.device()); // QFontMetricsF fontMetrics(font); QRectF rect = fontMetrics.boundingRect(QString("%1 %2").arg(family).arg(style)); //如果不scale的话,会因为打印的字太小而看不见。 qreal xScale = printer->pageRect().width() / rect.width(); qreal yScale = printer->pageRect().height() / rect.height(); double scale = qMin(xScale, yScale); // //Saves the current painter state (pushes the state onto a stack). painter.save(); //Translates the coordinate system by the given offset; painter.translate(printer->pageRect().width() / 2.0, printer->pageRect().height() / 2.0); //Scales the coordinate system by (sX, sY). painter.scale(scale, scale); //Background x character for assure the bound and string draw orientation. painter.setBrush(QBrush(Qt::white)); painter.drawRect(0,0,rect.width()/2,rect.height()); painter.setBrush(QBrush(Qt::black)); painter.drawLine(0, 0, rect.width()/2, rect.height()); painter.drawLine(0, rect.height(), rect.width()/2, 0); //Notice string vertical orientation in printer is negative from screen. painter.drawText(QPointF(0,0), QString("%1-%2").arg(family).arg(style)); //Restores the current painter state (pops a saved state off the stack). painter.restore(); //before begin new page. //printer->newPage(); //after all done. painter.end();}
备注
[1]
经测试上文中测试待打印字符串宽度的QFontMetricsF代码段是不正确的。
正确的应该参考下面的代码段,来得到在打印机上的物理宽度,奇怪的是这种方式不能得到高度。
painter.fontMetrics().width(instanceOfQString);
或 采用下面的初始化方式,能正确得到在打印机上的宽度和高度。
或 采用下面的初始化方式,能正确得到在打印机上的宽度和高度。
QFontMetricsF fm(instanceOfQFont,printer);//QPrinter*printer
fm.height()
fm.height()
1 0
- Qt5打印功能示例代码
- QT5串口通讯代码示例
- qt5框架—打印功能的实现
- QT5.7调用win7打印功能
- spread 打印示例代码
- WebForm 打印功能代码
- VB打印功能全代码
- java代码实现打印功能!
- 实现打印功能的代码
- 文件下载功能代码示例
- 在QT5中读取中文文本文件的示例代码
- QT5下SQLite的增删改查示例代码
- JS 打印功能代码(包括打印预览、打印设置等)
- js批量打印代码!有图片示例
- asp.net实现打印功能代码
- 记事本打印功能的一段代码
- Qt5 文本打印
- Qt5 图像打印
- JavaWeb学习总结(一)——JavaWeb开发入门
- 图像中求点到直线的距离
- 寻找自己的核心竞争力
- 【leetcode】 46. Permutations ,python实现
- JAVA使用Calendar操作Date
- Qt5打印功能示例代码
- 特征工程-降维
- 创建存储过程
- AssetBundle.CreateFromFile使用时注意事项
- MFC自定义消息
- Html5 获取手机短信号码
- TCP/IP详解——概述
- golang 中AES加密详解
- Struts与Spring整合实现用户登录