QT开发中文网

void LeftTreeWidget::paintEvent(QPaintEvent *event) { QPainter painter(viewport()); painter.setRenderHint(QPainter::Antialiasing); // 获取第一个顶层项 if (topLevelItemCount() > 0) { QTreeWidgetItem *firstItem = topLevelItem(0); ...

要在 QTreeWidgetpaintEvent 中按原图片大小绘制,而不是缩放到项的矩形区域,你只需要直接使用图像的原始尺寸进行绘制。以下是如何实现这一点的修改示例:

修改后的代码

#include <QPainter>
#include <QPixmap>
#include <QTreeWidget>

void LeftTreeWidget::paintEvent(QPaintEvent *event) {
    // 首先调用基类的 paintEvent 以确保树形控件正常绘制
    QTreeWidget::paintEvent(event);
    
    // 创建一个 QPainter 对象,在 viewport 上进行绘制
    QPainter painter(viewport());
    painter.setRenderHint(QPainter::Antialiasing);

    // 检查是否有顶层项
    if (topLevelItemCount() > 0) {
        QTreeWidgetItem *firstItem = topLevelItem(0);
        QRect rect = visualItemRect(firstItem); // 获取第一个项的矩形区域
        
        // 加载背景图像
        QString imagePath = ":/png/liebiaotoubeijing.png"; // 替换为你的图片路径
        QPixmap pixmap(imagePath);

        if (!pixmap.isNull()) {
            // 在 rect 的左上角绘制图像,保持其原始大小
            QPoint drawPoint(rect.topLeft().x(), rect.topLeft().y()); 
            painter.drawPixmap(drawPoint, pixmap);  // 按照原图大小贴图,不缩放
        } else {
            qDebug() << "Failed to load image:" << imagePath;
        }
    }
}

关键点

  1. 不缩放: 使用 drawPixmap 绘制时传递原始的 pixmap,而没有使用 .scaled() 方法。因此,图像将会按其原始尺寸被绘制。

  2. 位置调整: 如果您希望根据第一个项的位置来决定图像的绘制位置,可以通过获取 visualItemRect(firstItem) 的左上角坐标来确定。

  3. 错误处理: 添加了对 pixmap.isNull() 的检查,以确保成功加载图片,否则输出调试信息。

这种方式将确保您的背景图片按照它的实际尺寸显示,并不会进行任何缩放。如果还有其他问题,请随时询问!


内容由零声教学AI助手提供,问题来源于学员提问

目录导航
  • 修改后的代码
  • 关键点
  • 本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
    转载请注明出处:https://qt.0voice.com/?id=13227

    分享:
    扫描分享到社交APP
    上一篇
    下一篇
    发表列表
    游客 游客
    此处应有掌声~
    评论列表

    还没有评论,快来说点什么吧~

    联系我们

    在线咨询: 点击这里给我发消息

    微信号:3007537140

    上班时间: 10:30-22:30

    关注我们
    x

    注册

    已经有帐号?