【问题标题】:How to resize an image inside QLabel如何在 QLabel 中调整图像大小
【发布时间】:2011-05-16 04:58:01
【问题描述】:

我正在 Qt 中开发一个自定义插件,在这种情况下,我必须构建一个上面有一些图像的小部件。所以我使用 QLabel 作为我的自定义小部件的基类。这是绘制事件的代码

     QPixmap pic("/general/source/pic.png");
     setAutoFillBackground(true);
     QPalette palette;
     palette.setBrush(QPalette::Window, QBrush(pic));

     this->setPalette(palette);

现在图像在 QLabel 上呈现,但这不是我想要的。

  1. 我希望图像缩放到 QLabel 的大小。
  2. 当 QLabel 的大小超出图像大小时,我不希望图像自我重复。

请帮忙。

【问题讨论】:

    标签: qt custom-controls widget


    【解决方案1】:

    尝试使用QLabel函数

    setScaledContents(true);
    

    【讨论】:

    • 仅用于增长像素图。如果你想把大像素图放到小地方,它会被裁剪
    【解决方案2】:

    如果您有一个自定义小部件类,您可以覆盖paintEvent 并在该点进行正确的绘制。我不知道您是否可以只绘制缩放到适当大小的像素图并调用父类来完成绘制,或者您是否必须自己完成所有操作。

    【讨论】:

      【解决方案3】:

      假设您可以获得控件的大小,您可以在将像素图设置在画笔中之前对其进行缩放

      pic.scaled ( width, height, Qt::IgnoreAspectRatio, Qt::FastTransformation )
      

      这会返回另一个 QPixmap,您可以将其传递给 QBrush。

      仅供参考,您也可以使用样式表为您的控件设置边框图像。

      border-image: url( yourImage);
      

      【讨论】:

      • 什么不完全有效?图片没有缩放?它没有正确缩放?无法获取控件的大小?
      • Ok .. 知道哪里出错了.. 正确的代码是 Pixmap scaled = pic.scaled ( width, height, Qt::IgnoreAspectRatio, Qt::FastTransformation ) 然后显示缩放
      猜你喜欢
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 2020-10-02
      • 1970-01-01
      相关资源
      最近更新 更多