• 5894阅读
  • 8回复

[提问]QT打印不了啊,求救,帖代码高手帮看看,谢谢 [复制链接]

上一主题 下一主题
离线acidy
 
只看楼主 倒序阅读 楼主  发表于: 2011-12-20


void PrintReport()
{
#ifndef QT_NO_PRINTER
QFile file("report.html");
if (!file.open(QIODevice::ReadOnly))
{
  return;
}
QTextStream out(&file);
QString output = out.readAll();
// 打印
QPrinter printer;
printer.setPaperSize(QPrinter::A4);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("report.pdf");
//QPrintDialog dialog(&printer, this);
//if (dialog.exec())
//{
  QPainter painter(&printer);
  QTextDocument textDocument(this);
  textDocument.setHtml(output);
  //textDocument.print(&printer);
                    //}
file.close();
// 打印预览
QPrintPreviewDialog *dialog = new QPrintPreviewDialog(this);
connect(dialog, SIGNAL(paintRequested(QPrinter*)),&textDocument, SLOT(print(QPrinter*)));
dialog->exec();

#endif
}

上述代码,是将html文件读出来,用QTextDocument 的print实现打印,
问题是 打印出来是空白的,打印预览看也是什么都没有,调试断点进去textDocument里面有读到html内容的,这是怎么回事啊?为什么打印空白呢?
离线acidy
只看该作者 1楼 发表于: 2011-12-20
有人吗,我QQ 399434004  


敬请高手指导啊
离线acidy
只看该作者 2楼 发表于: 2011-12-20
怎么没有人呢?
离线cthawdf

只看该作者 3楼 发表于: 2011-12-20
QTextDocument  没有这个槽函数  需要自己实现这个槽函数
离线cthawdf

只看该作者 4楼 发表于: 2011-12-20
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QFile>
#include <QTextStream>
#include <QTextDocument>
#include <QPrintPreviewDialog>
#include <QPrinter>
#include <QPlainTextEdit>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QFile file("cth.txt");
    if (!file.open(QIODevice::ReadOnly))
    {
      return;
    }
    QTextStream out(&file);
    QString output = out.readAll();
    // 打印
    qDebug()<<output;
    printer= new QPrinter;

    printer->setPaperSize(QPrinter::A4);
    printer->setOutputFormat(QPrinter::PdfFormat);
    printer->setOutputFileName("report.pdf");
    //QPrintDialog dialog(&printer, this);
    //if (dialog.exec())
    //{
     // QPainter painter(&printer);
       textDocument =new QTextDocument(this);
      textDocument->setHtml(output);
      //textDocument->print(printer);
                        //}

    file.close();
    // 打印预览
    QPrintPreviewDialog *dialog = new QPrintPreviewDialog(this);
    connect(dialog, SIGNAL(paintRequested(QPrinter*)),this,SLOT(slotPrint(QPrinter*)));
    dialog->exec();

}

Widget::~Widget()
{
    delete ui;
}

void Widget::changeEvent(QEvent *e)
{
    QWidget::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}
void Widget::slotPrint(QPrinter* printer)
{

    textDocument->print(printer);
}
离线acidy
只看该作者 5楼 发表于: 2011-12-20
回 3楼(cthawdf) 的帖子
QTextDocument  这个不是sdk自带的吗? 这个类有自己的print的呀
离线cthawdf

只看该作者 6楼 发表于: 2011-12-20
但是他的print不是槽函数  所有像你那样用是不对的
离线acidy
只看该作者 7楼 发表于: 2011-12-20
回 6楼(cthawdf) 的帖子
嗯,print确实不是槽函数
我还得把它用在槽函数里

发现信号槽这个对习惯c/c++的QT新人来说太容易用错用乱了

真的太感谢了
离线acidy
只看该作者 8楼 发表于: 2011-12-20
引用第6楼cthawdf于2011-12-20 18:04发表的  :
但是他的print不是槽函数  所有像你那样用是不对的




这样打印预览是搞定了

但是我要实际打印却还是空白页呢
快速回复
限100 字节
 
上一个 下一个