用paintEvent()绘制文本

时间:2012-07-31 15:23:05

标签: html qt qt4 qstring qpainter

我有一个需要用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。

感谢帮助=)

2 个答案:

答案 0 :(得分: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 ...

答案 1 :(得分:2)

假设您试图通过QRect画家在QPainter rect上的str中打印HTML格式的文本内容。请执行以下操作:

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