2014-03-24 3 views
0

QTextDocument을 사용하여 html 데이터를 인쇄하려면 어떻게해야합니까?데이터 인쇄 QTextDocument 및 QPainter

내 코드 만 반환 오류 :

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(); 

오류 : 당신은 paintEvent 외부 위젯을 그리는이 문제입니다 : 내가 코멘트에 썼던 것처럼

QPainter::pen: Painter not active QPainter::setPen: Painter not active QPainter::pen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::restore: Unbalanced save/restore QPainter::end: Painter not active, aborted

+0

에 예에서'this' 포인트 란 : 여기

당신이 물어 예 코드? – vahancho

+0

@vahancho'QPainter :: begin()'을 어떻게 사용하나요? – user628298

+0

당신은'paintEvent' 밖에서 위젯을 그리기 때문에 이것은 문제입니다. –

답변

1

.

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; 
} 
+0

대단히 감사합니다. – user628298