• 7944阅读
  • 3回复

[提问]QT打印~感觉这类问题经常有问无回,请会的人帮帮忙~ [复制链接]

上一主题 下一主题
离线ff007bit
 
只看楼主 倒序阅读 楼主  发表于: 2011-01-11
大家好,小弟最近在用Qt做一个管理系统,其他的部分经过小弟千辛万苦终于磕磕绊绊,糊里糊涂地做出来了,就剩下一个打印模块了.系统是连接数据的,要求把数据库中的数据以表格形式直接打印出来,而且打印的页面上面要写几行文字,中间是那个表格,最后还有落款.
因为是初学Qt,没什么头绪,查了一些资料,学着写了写代码,诸大神请过目:
  1. QPrinter printer(QPrinter::ScreenResolution);
  2.     QPrintDialog *dialog=new QPrintDialog(&printer,this);  //打印对话框
  3.     dialog->setWindowTitle(tr("快速打印"));
  4.     if( dialog->exec() )
  5.     {
  6.         QString html;                
  7.         QPainter painter(&printer);         //@@@
  8.         /*设置头部*/
  9.         QTextDocument textdocument;
  10.         html=tr("<div align=\"center\">\n<div>\n<p></p>\n"
  11.              "<p><font size=\"+5\">*********************************</font></p>\n"
  12.              "<p><font size=\"+3\">************************</font></p>\n"
  13.              "<p><font size=\"+3\">***********************</font></p>\n</div>\n");
  14.         textdocument.setHtml(html);     //用html语言设置页面
  15.         textdocument.print(&printer);  //打印
  16.    }//@@@

上面只写了页面的上部,******表示文字
我的问题是:1.看资料,可以通过HTML+QTextDocument实现打印页面设置,上面的方法和代码对吗?
2.因为硬件条件不够,暂时没有打印机,无法验证,想问问上面的代码能实现打印吗?每次到选择打印设备时,为了让代码继续运行,我只能选择一个默认的Microsoft XPS Document Writer的东西,之后系统就会在@@@位置弹出另存为.xps的对话框,请问那个东西是什么,是我的代码有问题还是只是没选打印机的缘故.
3.如何实现打印预览?
本人邮箱ff007bit@163.com,有源代码希望可以发一份,供我参考.
离线XChinux

只看该作者 1楼 发表于: 2011-01-11
使用webkit(QWebView/QWebPage)进行HTML渲染打印要比QTextDocument更好一些。打印预览,用QPrintPreviewDialog类。你可以装个虚拟打印机,输出即可。或者直接输出到PDF中。
[ 此帖被XChinux在2011-01-11 21:19重新编辑 ]
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线ff007bit
只看该作者 2楼 发表于: 2011-01-11
回 1楼(XChinux) 的帖子
谢谢回复~还是斑竹好!
如何输出到PDF?
那个QPrintPreviewDialog不太会用,网上查的资料是这样
  1. void MainWindow::on_pushButton_clicked()
  2. {
  3.     QPrinter printer(QPrinter::HighResolution);
  4.     QPrintPreviewDialog preview(&printer,this);
  5.     connect(&preview, SIGNAL(paintRequested(QPrinter *)),this,SLOT(printPreview(QPrinter *)));
  6.     preview.exec();
  7. }
  8. void MainWindow::printPreview(QPrinter *printer)
  9. {
  10.     //ui->textEdit->print(printer);
  11.     ui->webView->print(printer);
  12. }

我不太懂预览的内容是通过哪个参数放进去的,我用的时候不知道为什么,那个QPrintPreviewDialog下面一片灰
离线ff007bit
只看该作者 3楼 发表于: 2011-01-11
我安装了虚拟机,输出了pdf文件
上面的代码,如果去掉QPainter painter(&printer); //@@@那行,就能输出,
不去掉,打印出来就为空~
谁知道为什么>谢谢~
快速回复
限100 字节
 
上一个 下一个