打印数据QTextDocument和QPainter

Print data QTextDocument and QPainter

本文关键字:QPainter QTextDocument 数据 打印      更新时间:2023-10-16

如何使用QTextDocument打印html数据?

我的代码,但返回错误:

QString text_x = "Hello World!";
QTextDocument *doc = new QTextDocument(this);
doc->setUndoRedoEnabled(false);
doc->setHtml("<p><span style="color:#000000; font-weight:600">"+text_x+"</span></p>");
doc->setTextWidth(width());
doc->setUseDesignMetrics(true);
doc->setDefaultTextOption(QTextOption(Qt::AlignHCenter));
QPainter *p = new QPainter(this);
p->setRenderHint(QPainter::Antialiasing, true);
p->begin(this);
doc->drawContents(p);
p->end();
错误:

QPainter::pen: Painter未激活QPainter::setPen:画家未激活QPainter::pen:画家未激活QPainter::setPen:画家未激活QPainter::setPen:画家未激活QPainter::setPen:画家未激活QPainter::setPen:画家未激活QPainter::setPen:画家未激活QPainter::setPen:画家未激活QPainter::还原:不平衡保存/还原QPainter::end:画家未激活,中止

正如我在评论中所写的:你在paintEvent之外的小部件上绘图,这是一个问题。

以下是您所要求的示例代码:

class MyDocWidget : public QWidget {
    Q_OBJECT
public:
    explicit MyDocWidget(QWidget * parent = 0, Qt::WindowFlags f = 0)
         : QWidget(parent, f)
    {
        doc = new QTextDocument(this);
        doc->setUndoRedoEnabled(false);
    }
public slots:
    void setHtml(const QString &html) {
         doc->setHtml(html);
         update();
    }
protected:
    void paintEvent(QPaintEvent * event) {
         QPainter p(this);
         p.setRenderHint(QPainter::Antialiasing, true);
         doc->drawContents(&p);
    }
    void resizeEvent(QResizeEvent * event) {
         QWidget::resizeEvent(event);
         doc->setTextWidth(width());
         update();
    }
private:
    QTextDocument *doc;
}