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


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 o18_99_1 2024-05-15 22:49 采纳率: 50% 浏览 5 首页/ 编程语言 / QGraphicsItem自定义绘制,drawContents绘制不出文字 qtc++ 代码141行,为什么只能画出图片来,文字画不出来 我在另一个demo中实现了paintEvent事件,结果是正常的 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

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

      展开全部

      评论 编辑记录
      编辑
      预览

      报告相同问题?

    • 相关阅读:
      微信小程序-4
      Elasticsearch面试题
      计算机视觉算法——基于Anchor Free的目标检测网络总结
      网络服务器和客户端的编写
      Redis数据库
      Dubbo-接口数据序列化Serialization
      探索ABP基础架构
      【周报2023-11-17】
      python 使用requests爬取百度图片并显示
      Oracle VM VirtualBox安装CentOS 7系统
    • 原文地址:https://ask.csdn.net/questions/8104124