工程里用到 qwebview,
所以要在.pro里加上 qt += webkit webkitwidgets
打印用到了 qprinter,
所以要在.pro里加上 qthavemodule(printsupport): qt += printsupport
直接附上源码吧,当然也是根据网上一些前辈的经验代码和实际使用情况改进而来:
#ifndef widget_h #define widget_h #include <qwidget> #include <qtablewidget> #include <qpainter> #include <qtprintsupport/qprinter> #include <qtprintsupport/qprintdialog> #include <qfileinfo> #include <windows.h> #include <qfiledialog> #include <qtprintsupport/qprintpreviewdialog> #include <qtprintsupport/qpagesetupdialog> #include <fstream> #include <iostream> #include <sstream> #include <qwebview> 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; }
相关推荐:
js调用打印机打印web页面
html网页打印
web打印实现几种方法
使用javascript实现页面打印
以上就是qt如何实现调用打印机来打印html中的网页及文件的详细内容。