setBackgroundImage(bgImage); } else { ...-Go服务器开发" />

ZBLOG

QString appDir = QCoreApplication::applicationDirPath() + "/img"; QString imagePath = QDir(appDir).filePath("2.jpg"); QPixmap bgImage(imagePath); if (!bgImage.isNull()) { pNewBoard->setBackgroundImage(bgImage); } else { ...

从您提供的代码来看,图片模糊可能有以下几个原因和解决方案:

1. 双重缩放问题

您的代码中存在潜在的两次缩放:

  • 第一次在 setBackgroundImage 中:pixmap.scaled(targetSize)
  • 第二次在 paintEvent 中:painter.drawPixmap(0, 0, width(), height(), m_backgroundImage)

解决方案

// paintEvent中改为直接绘制原尺寸:
painter.drawPixmap(0, 0, m_backgroundImage);

2. DPI处理不完整

虽然您处理了 devicePixelRatio,但可能还需要确保:

// 在构造函数中添加:
setAttribute(Qt::WA_TranslucentBackground);
setAttribute(Qt::WA_HighDpiScaling);

3. 原始图片质量检查

添加调试信息检查原始图片:

qDebug() << "Original image size:" << bgImage.size();
qDebug() << "Device pixel ratio:" << devicePixelRatio();
qDebug() << "Scaled size:" << m_backgroundImage.size();

4. 渲染提示优化

修改 paintEvent

void WhiteBoard::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing | 
                          QPainter::SmoothPixmapTransform |
                          QPainter::TextAntialiasing);

    if (m_hasBackground) {
        // 单参数绘制避免二次缩放
        painter.drawPixmap(rect(), m_backgroundImage, m_backgroundImage.rect());
    } else {
        painter.fillRect(rect(), m_Color);
    }
    
    // ...其余绘制代码...
}

5. 可能的根本原因排查表

现象 检查点 解决方案
所有图片都模糊 DPI缩放未启用 添加 Qt::AA_EnableHighDpiScaling
仅大图模糊 scalled尺寸计算错误 检查 targetSize = size() * ratio
PNG透明通道异常 Qt渲染合成问题 setAttribute(Qt::WA_TranslucentBackground)

建议按以下步骤测试:

  1. 先测试原始图片:临时取消所有缩放,直接显示原图看是否清晰
  2. 逐步添加功能:先加DPI处理,再加缩放逻辑

如果仍有问题,可能需要检查:

  1. 显示器DPI设置(系统级)
  2. Qt全局高DPI设置(QGuiApplication::setHighDpiScaleFactorRoundingPolicy)


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

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:setBackgroundImage(bgImage); } else { ...">https://golang.0voice.com/?id=23992

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?