0

paintEvent()を使用してテキストをペイントする必要があるプログラムがあります。私はこれを試しました:

1. QPainter painter; // painter for the canvas
2. painter.drawText(QPoint location, QString canvasText);

どこ

3. QString canvasText = variablesText.append("< b >");
4. variablesText.append((*fieldIter).second.c_str());
5. variablesText.append(":< /b > ");
6. variablesText.append(someValue);
7. variablesText.append("\n");

テキストをフォーマットする必要があります。canvasTextは次のようになります。

一部の太字のテキスト:一部の太字ではないテキスト。(改行)

一部の太字のテキスト2:一部の太字ではないテキスト2。(改行)そしてそれはしばらく続きます。

私が抱えている問題は、QStringにHTMLコードを含めることができないため、テキストが次のように表示されることです。

< b>Some bold text:< /b> some not bold text. < b>Some bold text 2: < /b>
some not bold text2.\n

paintEventでdrawを使用して、必要な方法でテキストを表示する方法はありますか?QString(またはQLabelなど)を使用

Qt4を使用しています。

助けてくれてありがとう=)

4

2 に答える 2

3

QTextDocument特に、あなたが求めているものにぴったりのようですsetHtml()QTextDocumentは、テキストをフォーマットし、ウィジェットのを介して結果を画面にペイントできますQPainter。以下のようなものが最も簡単な解決策です。

void Test::paintEvent(QPaintEvent *)
{
  QPainter painter(this);

  QTextDocument doc;
  doc.setHtml("<b>Title</b><p>Body Text</p>");

  doc.drawContents(&painter, rect());
}

ただし、これは非常に非効率的である可能性が高いことに注意してください。ソースhtmlが変更された場合にのみdrawContents()キャッシュしたいと思うでしょう...QPixmap

于 2012-07-31T16:03:59.443 に答える
2

ペインターQRectを介して、HTML形式のテキストコンテンツをstronrectに印刷しようとしているとします。QPainter次のようにします。

QString str; // this string contains HTML formatted contents 
QTextDocument * document = new QTextDocument(this) ;
document->setHtml(str) ;

painter.translate( rect.left() , rect.top() ) ;
document->drawContents( &painter , QRect( 0 , 0,  rect.width() , rect.height() ) ;
于 2012-07-31T15:57:40.887 に答える