【问题标题】:Qt - QPainter not painting QPixmap w/ Aspect RatioQt - QPainter 不绘制带纵横比的 QPixmap
【发布时间】:2017-12-23 03:15:46
【问题描述】:

我正在自定义小部件中绘画以匹配“Google 风格”卡片。我的大部分尺寸和字体都是正确的,但是在绘制图像时它总是被拉伸。这是参考图像和相关代码。我想保持图像的默认纵横比。

图片:

    QRect topPortion = QRect(QPoint(0, 0), QSize(width(), (height()/4)*3));
    QPainterPath backgroundPath;
    backgroundPath.addRect(topPortion);
    QPainterPath bottom = getCornerPath().subtracted(backgroundPath);
    QRect bottomRect = QRegion(rect()).subtracted(QRegion(topPortion)).boundingRect();

    painter.fillPath(getCornerPath(), m_bColor);
    painter.fillPath(bottom, m_fColor);

    painter.drawPixmap(topPortion, m_image.scaled(topPortion.size(), Qt::KeepAspectRatio, Qt::FastTransformation));//Issue

    painter.setPen(QPen(QColor(50, 50, 50)));
    painter.setFont(titleFont);
    painter.drawText(QPointF(12, topPortion.height()+((bottomRect.height()-fontHeight)/2)+QFontMetrics(titleFont).ascent()), "Add Record");
    painter.setFont(subtitleText);
    painter.drawText(QPointF(12, topPortion.height()+((bottomRect.height()-fontHeight)/2)+fontHeight), "Add Record");

【问题讨论】:

    标签: c++ qt qpainter


    【解决方案1】:

    您正在使用m_image.scaled 函数缩放图像,但也传递给painter.drawPixmap 函数、topPortion 变量,并根据docs

    如果像素图和 矩形大小不一致。

    所以我的解决方案是:

    //Your's calculation area
    QRect topPortion = QRect(QPoint(0, 0), QSize(width(), (height() / 4) * 3));
    
    QPixmap pixmap = QPixmap(1024, 768); //Random image
    pixmap.fill(Qt::red); //Random color
    
    //Scaled size that will be used to set draw aera to QPainter, with aspect ratio preserved
    QSize size = pixmap.size().scaled(topPortion.size(), Qt::KeepAspectRatio);
    
    //Draw the pixmap inside the scaled area, with aspect ratio preserved
    painter.drawPixmap(topPortion.x(), topPortion.y(), size.width(), size.height(), pixmap);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      相关资源
      最近更新 更多