【问题标题】:Print data QTextDocument and QPainter打印数据 QTextDocument 和 QPainter
【发布时间】:2014-03-24 15:57:34
【问题描述】:

如何使用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: Painter 未激活 QPainter::pen: Painter 未激活 QPainter::setPen: Painter 未激活 QPainter::setPen: Painter 未激活 QPainter::setPen: Painter 未激活active QPainter::restore: 不平衡的保存/恢复 QPainter::end: Painter 不活跃,中止

【问题讨论】:

  • 您的示例中的this 指向什么?
  • @vahancho 如何使用QPainter::begin()
  • 您在paintEvent 之外的小部件上绘图,这是个问题。
  • @Marek R 如何使用paintEvent,请给我看代码?

标签: c++ qt


【解决方案1】:

正如我在评论中所写:您在 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;
}

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2011-02-05
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多