我有一个需要用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。
感谢帮助=)
答案 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() ) ;