【问题标题】:What might I be doing wrong to draw text with QPainter in QT 5 using C++?使用 C++ 在 QT 5 中使用 QPainter 绘制文本可能做错了什么?
【发布时间】:2020-10-18 03:01:00
【问题描述】:

在我正在编写的游戏的自定义小部件的 paintEvent 方法中,在调用各种模型对象的 render() 方法将它们渲染到小部件后,我正在尝试渲染“高分”文本。这是文本绘制的通用代码:

painter.fillRect(event->rect(), QColor(0, 0, 0));
painter.drawImage(QRectF(event->rect().x(), event->rect().y() + 30, 512, 512), getGameBoardImage());

//...rendering other model components

painter.setBrush(QBrush(QColor(255, 255, 255)));
//painter.setFont(getGameFont());
painter.setFont(QFont("Times New Roman", 16, QFont::Bold));
painter.drawText(0, 0, "HI-SCORE");

我“正在”尝试以从资源加载的自定义字体绘制文本(我在此处找到了答案),但即使使用白色画笔,它也不会显示。我想可能是因为我没有“设置”字体,但将其设置为 Times New Roman 也不会显示任何内容。我可能做错了什么?如您所见,背景是黑色背景,游戏板画在顶部,但在顶部和底部留下了一个小缓冲区。我需要做一些特别的事情来显示文本吗?请不要建议使用 QLabel,因为如果可能,我会尝试将其全部保存在一个小部件中。如果必须,我会将 Hi-Score 和 1-Ups 分成另外两个带有特殊字体的标签集。

【问题讨论】:

    标签: c++ qt qpainter


    【解决方案1】:

    您的代码看起来不错,但是您在 0,0 处绘制,这是小部件画布的左上角,并且文本实际上在那里但不可见...

    改为在

    painter.drawText(margin, y+margin, "HI-SCORE");
    

    其中 y 是用于绘制文本的字体的高度,边距是您知道一点边距边框,以使其看起来更好,例如 5 个单位

    更新

    你可以得到你正在画的文字的价值,比如

     QFont font("times", 25);
     QFontMetrics fm(font);
     int pixelsW{fm.width("HI-SCORE")};
     int pixelsH{fm.height()};
    

    【讨论】:

    • 我做了 0,0 因为当我第一次开始渲染组件时,我在 0,0 渲染它们(没有设置任何真实坐标)。它们都显示在小部件的左上角。所以我只是假设做 drawText 会做同样的事情。我开始在 350、25 左右绘制文本,但仍然没有显示 - 我添加了白色画笔,然后是新的罗马字体,但仍然没有显示,所以我将其更改为 0、0 b/c 我有视力问题,也许我在棋盘中间漏掉了它什么的。我会尝试这个建议,但我也已经开始更新以使用标签
    • 我通过设置样式表来显示文本。但是为什么 setBrush 不起作用呢?这是我想不通的。我想通过将画笔颜色设置为总颜色的减少部分来使文本在一个位置淡出。我将发布另一个问题,因为它略有不同,我怀疑有人会看到此评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2020-07-11
    • 1970-01-01
    • 2011-04-07
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多