我正在尝试在qgraphicswidget中绘制文本。场景的比例在水平方向为-180到180,垂直方向为-90到+90(这是世界地图)。
当我放大地图上的各个项目时,我想要显示一些文字。我的一个特定项目的绘制功能代码如下所示:
void AirportGraphicsWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) {
QPen pen;
pen.setStyle(Qt::PenStyle::NoPen);
painter->setBrush(Qt::lightGray);
painter->setPen(pen);
if (m_curr_lod <= LevelOfDetail::MEDIUM) {
painter->setBrush(QColor(206, 211, 219));
painter->drawEllipse(m_airport_significance_rect);
} else if(m_curr_lod == LevelOfDetail::HIGH) {
painter->setBrush(QColor(56, 55, 52, 150));
painter->drawEllipse(m_airport_boundary);
DrawRunways(painter, option, widget);
} else {
painter->setBrush(QColor(56, 55, 52));
painter->drawEllipse(m_airport_boundary);
pen.setStyle(Qt::PenStyle::SolidLine);
pen.setColor(Qt::black);
painter->setPen(pen);
DrawRunways(painter, option, widget);
DrawILS(painter, option, widget);
DrawCOM(painter, option, widget);
QPen pen;
pen.setStyle(Qt::PenStyle::SolidLine);
pen.setColor(Qt::white);
pen.setWidth(0);
QFont font("Arial");
font.setPixelSize(15);
painter->setFont(font);
painter->setPen(pen);
painter->drawText(m_airport_boundary, "TEST");
}
}
drawText调用似乎根本不起作用。我在此缩放级别的比例非常小。 m_airport_boundary QRectF变量具有以下值: {x = -0.010286252057250001,y = -0.010286252057250001,width = 0.020572504114500002,height = 0.020572504114500002}
m_airport_boundary rect的绘图是可见的所以我知道我试图在正确的位置绘图。谁能告诉我我做错了什么?
绘图的截图...黑色圆圈是m_airport_boundary椭圆。绿色事物是DrawILS的结果,蓝色圆圈是DrawCOM
答案 0 :(得分:1)
当前的QTransform比例正在影响字体大小。
我建议计算屏幕空间中的文本位置,重置转换然后调用drawText()。
这是一个片段(假设你想在中心画画):
QPointF pos = m_airport_boundary.center();
QTransform t = painter->transform();
painter->resetTransform();
pos = t.map(pos);
painter->drawText(pos, "TEST");