o18_99_1 2024-05-15 22:49 采纳率: 44.4%
浏览 41

QGraphicsItem自定义绘制,drawContents绘制不出文字

img


代码141行,为什么只能画出图片来,文字画不出来

img


我在另一个demo中实现了paintEvent事件,结果是正常的

img

  • 写回答

1条回答 默认 最新

  • 阿里嘎多学长 2024-05-15 23:03
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题

    您提问的目的是解决在Qt框架中自定义QGraphicsItem的绘制问题,具体来说,您希望在自定义的paint函数中绘制文字,但遇到了无法显示文字的问题。

    图片内容

    1. 第一张图片:展示了MessageItem::paint函数的代码,其中包含了绘制消息边框和文字的逻辑。特别地,代码的第141行尝试通过m_text.drawContents(painter, text_rect);来绘制文字,但似乎没有成功。
    2. 第二张图片:显示了另一个demo中的paintEvent函数实现,其中通过doc.drawContents(&painter, QRect(0,0,1000,1000));成功绘制了富文本。
    3. 第三张图片:与第二张图片相同,是关于paintEvent函数的实现。

    问题出现原因

    问题可能出现的原因有:

    • m_text对象可能没有正确设置或初始化,导致无法绘制文字。
    • drawContents方法的使用可能不适用于当前的QGraphicsItem绘制上下文。
    • 绘制文字的坐标或尺寸可能不正确,导致文字没有出现在预期的位置。

    问题解决方案

    为了解决这个问题,您可以尝试以下步骤:

    1. 检查m_text对象:确保m_text是一个有效的QTextDocument实例,并且已经包含了要绘制的文本。
    2. 使用drawText代替drawContents:由于drawContentsQTextDocument的方法,它通常用于绘制整个文档的内容。您可能需要使用QPainterdrawText方法来直接绘制文本。
    3. 调整文本绘制参数:确保text_rect的坐标和尺寸是正确的,并且QPainter的字体和颜色设置符合您的要求。

    提供代码

    以下是修改后的代码示例,使用drawText代替drawContents

    // ...之前的代码...
    
    // 绘制文字
    QPen penText;
    penText.setColor(QColor(90, 180, 255));
    painter.setPen(penText);
    QTextOption option(Qt::AlignLeft);
    option.setWrapMode(QTextOption::WordWrap); // 修正WrapMode的枚举值
    QFont font("Microsoft YaHei");
    font.setPixelSize(kMsgFontSize);
    painter.setFont(font);
    QRectF text_rect(textPos.x(), textPos.y(), m_textSize.width(), m_textSize.height());
    painter.drawText(text_rect, m_text.toPlainText(), option); // 使用drawText而不是drawContents
    
    // ...之后的代码...
    

    代码运行方式

    • 确保您的开发环境已经安装了Qt框架。
    • 将上述代码替换到您的MessageItem::paint函数中。
    • 运行您的Qt应用程序。

    代码预期运行结果

    如果代码修改正确,您应该能够在自定义的QGraphicsItem上看到绘制的文本。

    推荐相关链接

    请注意,由于您提供的图片内容是PNG格式的代码截图,我无法直接执行代码以验证结果。上述代码和建议基于您提供的图片内容和描述进行推断。如果问题仍然存在,您可能需要进一步调试或提供更多的上下文信息。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月15日