我正在父QLabel
内的label
QPixmap
内动态创建名为QHBLayout
的{{1}} layout
由QWidget
命名,以便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);
课程并定义MyLabel
和sizeHint()
,如下所示:
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();
}
}
图像仍然在不保持宽高比的情况下调整大小。
我在这里缺少什么?
任何帮助都将受到高度赞赏。 提前谢谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
尝试调整图片大小而不是QLabel
。例如。通过挂钩父窗口小部件的resizeEvent并执行以下操作:
const QPixmap* pixmap = label->pixmap();
if (pixmap->width() >= newGeometry.width())
{
QPixmap scaledPixmap = pixmap->scaledToWidth(newWidth, Qt::SmoothTransformation);
label->setPixmap(scaledPixmap);
}