如何使用QHBLayout调整子QLabel(具有QPixmap)的大小来保持宽高比?

时间:2017-04-18 03:13:52

标签: image qt resize qlabel

我正在父QLabel内的label QPixmap内动态创建名为QHBLayout的{​​{1}} layoutQWidget命名,以便this图片的大小调整为父QLabel,但保持原始图像宽高比。

我现在正在做的事情如下:

this

在线搜索并按照Qt layouts - Keep widget aspect ratio while resizing中接受的答案中的建议,我甚至尝试创建自己的QHBoxLayout* layout = new QHBoxLayout(this); label = new QLabel(str, this); /* This Label is my concern */ label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); layout->addWidget(label); layout->setAlignment(Qt::AlignCenter); this->setLayout(layout); layout->setContentsMargins(0,0,0,0); layout->setSpacing(0); label->setScaledContents(true); label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 课程并定义MyLabelsizeHint(),如下所示:

resizeEvent(QResizeEvent* event)

QSize MyLabel::sizeHint() const { QSize s = size(); lastHeight = s.height(); lastWidth = s.width(); QSize qs = QLabel::sizeHint(); float ratio = std::min(((float)qs.width())/lastWidth, ((float)qs.height())/lastHeight); s.setWidth(lastWidth*ratio); s.setHeight(lastHeight*ratio); return s; } void MyLabel::resizeEvent(QResizeEvent* event) { QLabel::resizeEvent(event); if(lastHeight!=height()) { updateGeometry(); } } 图像仍然在不保持宽高比的情况下调整大小。

我在这里缺少什么?

任何帮助都将受到高度赞赏。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

尝试使用此处列出的QLabel的子类:

https://stackoverflow.com/a/22618496/999943

希望有所帮助。

答案 1 :(得分:0)

尝试调整图片大小而不是QLabel。例如。通过挂钩父窗口小部件的resizeEvent并执行以下操作:

const QPixmap* pixmap = label->pixmap();
if (pixmap->width() >= newGeometry.width())
{
    QPixmap scaledPixmap = pixmap->scaledToWidth(newWidth, Qt::SmoothTransformation);
    label->setPixmap(scaledPixmap);
}