使用QPainter绘制富文本
Draw rich text with QPainter
有没有办法绘制带有下标的固定文本。我的目标是拥有类似的东西:"K_max=K_2 . 3"
QString equation="K_max=K_2 . 3";
painter.drawText( QRect(x, y , width, y+height), Qt::AlignLeft|Qt::AlignVCenter, equation);
我也尝试使用 html 标签格式化文本,但没有帮助(标签与文本一起打印):
QString equation="<p>K<sub>max</sub></p>=<p>K<sub>2</sub></p>.3"
您可以使用支持的 Qt HTML subset to format your text. If you need to draw formatted text, you should use QTextDocument::drawContents
。
QPainter::drawText
专为无格式的纯文本设计,速度更快。
这是一个使用 QTextDocument 的富文本的完整示例。
mainWindow.cpp:
#include "mainWindow.h"
void MainWindow::paintEvent(QPaintEvent*)
{
QPainter painter(this);
QTextDocument td;
td.setHtml("K<sub>max</sub>=K<sub>2</sub> · 3");
td.drawContents(&painter);
}
如果需要在特定点绘制文字,绘制前先平移画家的坐标系:
painter.translate(QPointF(50, 50));
mainWindow.cpp - 另一个解决方案:
#include "mainWindow.h"
void MainWindow::paintEvent(QPaintEvent*)
{
QPainter painter(this);
QTextDocument td;
td.setHtml("K<sub>max</sub>=K<sub>2</sub> · 3");
QAbstractTextDocumentLayout::PaintContext ctx;
ctx.clip = QRectF( 0, 0, 400, 100 );
td.documentLayout()->draw( &painter, ctx );
}
mainWindow.h:
#include <QtGui>
class MainWindow: public QWidget
{
protected:
void paintEvent(QPaintEvent*);
};
main.cpp:
#include <QtGui>
#include "mainWindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
项目文件:
TEMPLATE = app
QT += gui
HEADERS = mainWindow.h
SOURCES = main.cpp mainWindow.cpp
结果:
有没有办法绘制带有下标的固定文本。我的目标是拥有类似的东西:"K_max=K_2 . 3"
QString equation="K_max=K_2 . 3";
painter.drawText( QRect(x, y , width, y+height), Qt::AlignLeft|Qt::AlignVCenter, equation);
我也尝试使用 html 标签格式化文本,但没有帮助(标签与文本一起打印):
QString equation="<p>K<sub>max</sub></p>=<p>K<sub>2</sub></p>.3"
您可以使用支持的 Qt HTML subset to format your text. If you need to draw formatted text, you should use QTextDocument::drawContents
。
QPainter::drawText
专为无格式的纯文本设计,速度更快。
这是一个使用 QTextDocument 的富文本的完整示例。
mainWindow.cpp:
#include "mainWindow.h"
void MainWindow::paintEvent(QPaintEvent*)
{
QPainter painter(this);
QTextDocument td;
td.setHtml("K<sub>max</sub>=K<sub>2</sub> · 3");
td.drawContents(&painter);
}
如果需要在特定点绘制文字,绘制前先平移画家的坐标系:
painter.translate(QPointF(50, 50));
mainWindow.cpp - 另一个解决方案:
#include "mainWindow.h"
void MainWindow::paintEvent(QPaintEvent*)
{
QPainter painter(this);
QTextDocument td;
td.setHtml("K<sub>max</sub>=K<sub>2</sub> · 3");
QAbstractTextDocumentLayout::PaintContext ctx;
ctx.clip = QRectF( 0, 0, 400, 100 );
td.documentLayout()->draw( &painter, ctx );
}
mainWindow.h:
#include <QtGui>
class MainWindow: public QWidget
{
protected:
void paintEvent(QPaintEvent*);
};
main.cpp:
#include <QtGui>
#include "mainWindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
项目文件:
TEMPLATE = app
QT += gui
HEADERS = mainWindow.h
SOURCES = main.cpp mainWindow.cpp
结果: