c++ - Qt:调整包含 QPixmap 的 QLabel 的大小,同时保持其纵横比

标签 c++ qt qt4 qlabel

我使用 QLabel 向用户显示更大、动态变化的 QPixmap 的内容。根据可用空间使这个标签更小/更大会很好。屏幕尺寸并不总是像 QPixmap 一样大。

如何修改 QLabel 的 QSizePolicysizeHint() 来调整 QPixmap 的大小,同时保持原始 QPixmap 的纵横比?

我无法修改 QLabel 的 sizeHint(),将 minimumSize() 设置为零无济于事。在 QLabel 上设置 hasScaledContents() 允许增长,但会破坏纵横比...

子类化 QLabel 确实有帮助,但是这个解决方案为一个简单的问题添加了太多代码......

任何巧妙的提示如何在没有子类的情况下完成这个?

最佳答案

为了更改标签尺寸,您可以为标签选择适当的尺寸策略,例如展开或最小展开。

您可以通过在每次更改时保持其纵横比来缩放像素图:

QPixmap p; // load pixmap
// get label dimensions
int w = label->width();
int h = label->height();

// set a scaled pixmap to a w x h window keeping its aspect ratio 
label->setPixmap(p.scaled(w,h,Qt::KeepAspectRatio));

您应该在两个地方添加此代码:

  • 像素图更新时
  • 在包含标签的小部件的resizeEvent

关于c++ - Qt:调整包含 QPixmap 的 QLabel 的大小,同时保持其纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8211982/

相关文章:

c++ - 为什么这会起作用以及如何起作用?非静态 Qt 对象

c++ - 如何设置一个简单的 CGAL + Qt 程序

c++ - 错误 : invalid operands of types 'int' and 'float*' to binary operator '/'

c++ - C++串口问题

c++ - "template <class T>"和 "template <typename T>"有什么区别?

c++ - 绘制的自定义项目有时会在 QGraphicsScene 中被砍掉

qt - 将槽调用设为虚函数

c++ - 使用 vector 作为类成员

c++ - QFileDialog打开多个文件

python - 从 MainWindow 内的 QWidget 内的按钮更改 MainWindow 小部件