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。(newLine) 并且持续了一段时间。

我遇到的问题是 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(). AQTextDocument可以格式化您的文本并通过小部件的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

假设您正在尝试通过painter在QRectrect的 str 中打印 HTML 格式的文本内容。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 回答