c++ - 在 QGraphicsWidget::paint 函数中绘制文本

标签 c++ qt qgraphicsview qgraphicsscene qgraphicswidget

我正在尝试在 qgraphicswidget 中绘制文本。场景的水平比例为 -180 到 180,垂直比例为 -90 到 +90(这是一张世界地图)。

当我放大 map 上的单个项目时,我希望显示一些文本。我的一个特定项目的绘画功能代码如下所示:

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,宽度 = 0.020572504114500002,高度 = 0.020572504114500002 }

m_airport_boundary 矩形的绘图是可见的,所以我知道我正在尝试在正确的位置绘图。谁能告诉我我做错了什么?

正在绘制的屏幕截图...黑圈是 m_airport_boundary 椭圆。绿色的东西是DrawILS的结果,蓝色圆圈是DrawCOM

enter image description here

最佳答案

当前的 QTransform 比例会影响字体大小。

我建议计算文本在屏幕空间中的位置,重置变换,然后调用 drawText()。

这是一个片段(假设你想在中心绘制):

QPointF pos = m_airport_boundary.center();
QTransform t = painter->transform();
painter->resetTransform();
pos = t.map(pos);

painter->drawText(pos, "TEST");

关于c++ - 在 QGraphicsWidget::paint 函数中绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49804826/

相关文章:

c++ - QSharedPointer VS std::tr1::shared_ptr VS boost::tr1::shared_ptr

c++ - QGraphicsView - View 导航不工作

c++ - 在 QGraphicsView/QGraphicsScene 中移动 QGraphicsProxyWidget 中的嵌入式小部件

c++ - istream 与内存映射文件?

c++ - 为什么复制构造函数在C++中直接使用私有(private)属性

c++ - 如何避免这种重复

python - 如何在 QGraphicsScene 中正确放置小部件

c++ - 制作 boost::进程间共享内存对象的非共享拷贝

c++ - 使用 QGraphicsView 选择很多多段线效果不佳

c++ - qPrintable 是否容易出现访问冲突?