QT怎么实现调用打印机来打印html中的网页及文件
这篇文章主要介绍QT怎么实现调用打印机来打印html中的网页及文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

专注于为中小企业提供成都网站制作、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业叶城免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
工程里用到 QWebView,
所以要在.pro里加上 QT += webkit webkitwidgets
打印用到了 QPrinter,
所以要在.pro里加上 qtHaveModule(printsupport): QT += printsupport
直接附上源码吧,当然也是根据网上一些前辈的经验代码和实际使用情况改进而来:
#ifndef WIDGET_H #define WIDGET_H #include#include #include #include #include #include #include #include #include #include #include #include #include #include namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private slots: void on_pushButton_clicked(); void printPreview(QPrinter *printer); private: Ui::Widget *ui; void doPrint(); void doPrintPreview(); void createPdf(); void setUpPage(); bool printFile(const QString & filePath); };
实现:
#include "Widget.h"
#include "ui_Widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this); //这里没用QFile文件读html文件,因为会使html网页中文成乱码
QString strHtmltext;
std::string bufStr;
std::ifstream readFile;
readFile.open("D:\\qqq.html");
if(readFile.is_open())
{
while(getline(readFile, bufStr))
{
strHtmltext += QString(bufStr.data());
}
readFile.close();
}
ui->webView->setHtml(strHtmltext);
}
Widget::~Widget()
{ delete ui;
}//点击这里触发打印动作!
void Widget::on_pushButton_clicked()
{
doPrint();
// doPrintPreview();
// printFile("D:/123.txt");
}
void Widget::doPrint()
{
// 创建打印机对象
QPrinter printer;
// 创建打印对话框
QString printerName = printer.printerName();
if( printerName.size() == 0)
return;
QPrintDialog dlg(&printer, this);#if 0
//如果编辑器中有选中区域,则打印选中区域
if (ui->textEdit->textCursor().hasSelection())
dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
#endif
// 如果在对话框中按下了打印按钮,则执行打印操作
// if (dlg.exec() == QDialog::Accepted)
//这里使用默认打印机,不用每次选择打印机
{
// ui->textEdit->print(&printer);
ui->webView->print(&printer);
// print the existing document by absoult path
// printFile("D:/myRSM.doc");
}
}
// 打印预览void Widget::doPrintPreview()
{
QPrinter printer;
// 创建打印预览对话框
QPrintPreviewDialog preview(&printer, this);
// 当要生成预览页面时,发射paintRequested()信号
connect(&preview, SIGNAL(paintRequested(QPrinter*)),this,SLOT(printPreview(QPrinter*)));
preview.exec();
}
void Widget::printPreview(QPrinter *printer)
{
// ui->textEdit->print(printer);
ui->webView->print(printer);
}
// 生成PDF文件
void Widget::createPdf()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("导出PDF文件"), QString(), "*.pdf");
if (!fileName.isEmpty()) {
// 如果文件后缀为空,则默认使用.pdf
if (QFileInfo(fileName).suffix().isEmpty())
fileName.append(".pdf");
QPrinter printer;
// 指定输出格式为pdf
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName(fileName);
// ui->textEdit->print(&printer);
ui->webView->print(&printer);
}
}
// 页面设置void Widget::setUpPage()
{
QPrinter printer;
QPageSetupDialog pageSetUpdlg(&printer, this);
if (pageSetUpdlg.exec() == QDialog::Accepted)
{
printer.setOrientation(QPrinter::Landscape);
}
else
{
printer.setOrientation(QPrinter::Portrait);
}
}
bool Widget::printFile(const QString & filePath)
{
// create a printer
QPrinter printer;
QString printerName = printer.printerName();
// no default printer or no file return false
if( printerName.size() == 0 || filePath.size() == 0)
return false;
QFileInfo fi(filePath);
if(!fi.exists())
return false;
int ret = 0;
//执行DOS命令调系统打印
ret = (int)ShellExecuteW(NULL,
QString("print").toStdWString().c_str(),
filePath.toStdWString().c_str(),
NULL,
NULL,
SW_HIDE);
// if return number bigger than 31 indicate succ
if (ret > SE_ERR_NOASSOC)
return true;
return false;
}以上是QT怎么实现调用打印机来打印html中的网页及文件的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!
本文名称:QT怎么实现调用打印机来打印html中的网页及文件
路径分享:http://www.jxjierui.cn/article/ihhjid.html


咨询
建站咨询
