QT如何实现调用打印机来打印html中的网页及文件

这篇文章介绍的内容是QT如何实现调用打印机来打印html中的网页及文件,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

工程里用到 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_OBJECTpublic:       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;}

相关推荐:

JS调用打印机打印Web页面

立即学习“前端免费学习笔记(深入)”;

HTML网页打印

web打印实现几种方法

使用JavaScript实现页面打印

以上就是QT如何实现调用打印机来打印html中的网页及文件的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1546026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 17:45:57
下一篇 2025年12月21日 17:46:04

相关推荐

  • 总结HTML/CSS中的特殊字符

    HTML有许多特殊的字符,您对此有多少了解?平时在WEB制作中,您又有用到多少?或者说你在平时使用之时,是否也会碰到,有许多特殊字符要如何打印出来?比如说“笑脸”,比如说“版权号”。要是你用时忘记了这些特殊字符,不要紧,请记住今天这个地址,你就随时可以查到这些特殊字符的表示方法。 简单的介绍一下其使…

    好文分享 2025年12月21日
    000
  • html如何只显示部分td文字

    这篇文章介绍的内容是html如何只显示部分td文字,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 可以直接这样写: for( var i=0;i<team.makeup_newsList.length;i++){var newsresult=team.makeup_newsLi…

    2025年12月21日
    000
  • HTML实现美化上传文件样式

    这篇文章介绍的内容是HTML实现美化上传文件i样式 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 传统写法 上传文件 效果如下图所示 这个样式调整了很长时间,最后结果都不尽人意。 非常规写法 上传文件 上传 给真正的用于上传文件的Input style=’display:none;…

    2025年12月21日
    000
  • 再谈前端HTML模板技术

    这篇文章介绍的内容是关于再谈前端HTML模板技术,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 在web2.0之前,写jsp的时候虽然有es和JSTL,但是还是坚持jsp。后面在外包公司为了快速交货,还是用了php Smart技术。 web2.0后,前端模板技术风行。 代表有如下三大…

    2025年12月21日 好文分享
    000
  • HTML之head头部的实现

    本文主要为大家分享一篇HTML之head头部的实现的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。 html头部 head元素用于定义文档的头部信息,出现在 … 标签之间的内容,是文档的头部信息。头部定义的内容不会在浏览器窗口的正文部分显示出来。 head元素比较…

    2025年12月21日
    000
  • 图解HTML之文档结构

    本文主要为大家分享一篇图解HTML之文档结构的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。 html文档的结构,我们可以将它理解为网页的语法结构,一种编码的格式。这个文档结构可以使网页的编写变得非常的规范。规范的代码可以增加代码可读性,看起来也显得更加的专业。 HTML文档…

    2025年12月21日
    000
  • 关于HTML中的代码注释

    本文主要为大家分享一篇关于HTML中的代码注释的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。 html注释 在HTML代码中,标签之间的文本是文档的注释,注释的内容不会被显示在浏览器页面上。只有在文本编辑器中,或浏览器的“查看源代码”选项打开文档时,才能看到注释。 HTML…

    好文分享 2025年12月21日
    000
  • Html中引入外部页面的方法

    通常一个网站的head,foot,rightBar(右侧的条目)都是相同的,这部分内容可以通过引入的方式,否则一旦需要修改,就需要修改十个,二十个,乃至更多的页面,是一项既繁琐但又毫无意义的工作。借助于PHP或者JSP,使用include能够轻松解决此问题,但是如果脱离后端语言,从前端的角度,能不能…

    2025年12月21日
    000
  • 实现在HTML页面加载完毕后运行js方法

    本文主要和大家分享实现在HTML页面加载完毕后运行js方法,主要以代码的方法和大家分享,希望能帮助到大家。 Js方法: window.onload=function (){ var userName=”xiaoming”; alert(userName);} jQuery方法,需要引用jQuery文…

    好文分享 2025年12月21日
    000
  • HTML代码实现简易购物车

    网上关于购物车实现的代码非常多,本次的这篇文章主要是和大家分享了HTML代码实现简易购物车,有需要的小伙伴可以看一下,接下来讲解一下具体的实现。 1、用html实现内容; 2、用css修饰外观; 3、用js(jq)设计动效。   第一步:首先是进行html页面的设计,我用一个大的p将所有商品包含,然…

    2025年12月21日
    000
  • 实例详解HTML如何实现文件间自由切换

    本次的这篇文章主要是和大家分享了实例详解HTML如何实现文件间自由切换,有需要的小伙伴可以看一下。 代码很简单(大道至简嘛)。 先创建一个文件,文件名嘛随便,第二个文件名就不能随便了,因为到时候要调用第二个文件。 建好第一个文件后,用记事本打开文件加代码↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓(记得改文件后…

    2025年12月21日
    000
  • webpack对html文件的处理

    本篇文章给大家分享的是关于webpack对html文件的处理 ,步骤都很详细,有需要的朋友可以参考一下 为什么去处理html文件 我们所有的方法都打包到了dist的文件夹下面,而我们的html是在自己定义的文件夹下面,如果自己手动再去一个一个src引入这些dist文件夹下的js,那么也有些太不靠谱了…

    2025年12月21日 好文分享
    000
  • html的基础 理论

    本篇文章给大家分享的是关于html基础 理论知识,内容很不错,有感兴趣的朋友可以看一下 HTML 语义化 HTML标签的语义化是指:通过使用包含语义的标签(如h1-h6)恰当地表示文档结构 css命名的语义化是指:为html标签添加有意义的class 为什么需要语义化: 立即学习“前端免费学习笔记(…

    好文分享 2025年12月21日
    000
  • 关于html、js的一些用法小技巧

    本篇文章给大家分享的内容是关于html、js的一些用法小技巧,有着一定的参考价值,有需要的朋友可以参考一下 一、Form实现Ajax提交表单 function xxx() { var opts = { url : ‘/xxx.do’, type : ‘post’, dataType : ‘json’…

    好文分享 2025年12月21日
    000
  • HTML调用PHP

    html本身是无法处理动态请求,要完成这个,一般是用javascript。在生成静态网页,可以根据数据库id给html页面生成一个相对应的javascript文件引用。比如页面是123.html,那就在这个页面生成一个。 然后在click.php这个页面就按照php的语法去处理操作数据库就行。 静态…

    好文分享 2025年12月21日
    000
  • HTML如何将网页设计自动适应屏幕宽度

    今天本文主要和大家谈谈HTML如何将网页设计自动适应屏幕宽度 ,需要的朋友可以参考下,希望能帮助到大家。 允许网页宽度自动调整 “自适应网页设计”到底是怎么做到的?其实并不难。 首先,在网页代码的头部,加入一行viewport元标签。 viewport是网页默认的宽度和高度,上面这行代码的意思是,网…

    好文分享 2025年12月21日
    000
  • html如何实现字体大小的自适应

    本文主要和大家分析html如何实现字体大小的自适应,需要的朋友可以参考下,希望能帮助到大家。下面跟随小编一起来看一下吧。 <!DOCTYPE html 菜鸟教程(runoob.com) table { font-size: 1vw;} 一行三列: 10010010010010010010010…

    好文分享 2025年12月21日
    000
  • 前端html的实例分享

    本文主要和大家分享前端html的基本用法和实例详解,希望能帮助到大家。 代码要求: 代码如下: Document.body {width: 560px;height: 260px;border: 1px solid black;padding: 20px;font-size: 14px;line-h…

    2025年12月21日
    000
  • 动态生成的HTML标签如何实现绑定事件

    动态用js往HTML生成标签之后如何对生成的HTML标签绑定事件;尝试了很多种方法之后就是绑定不上;今天跟随小编一起来看解决方案吧。 不成功的案例: $(“#id”).change(function(){ console.log(‘需要执行的事情’);}); 发现用上述的方法,对用JS生成的HTML…

    好文分享 2025年12月21日
    000
  • HTML关于结构语义化的问题

    本文主要为大家分享一篇HTML关于结构语义化的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。 为什么要web语义化?        首先,人可以通过视觉的划分判断内容的语义,搜索引擎看到的只是代码。搜索引擎只能通过标签来判断内容的语义。因为页面的很大一部分流量是来自搜索引擎的…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信