I 동적 QLabel
화상 상위 this
와 크기를 조절하지만, 원래의 화상 종횡비를 유지하도록 this
의해 명명 상위 QWidget
내부라는 QHBLayout
layout
내부 QLabel
라는 label
을 (즉 QPixmap
을 갖는다)을 생성하고있다.가로 세로 비율을 유지하면서 QHBLayout으로 자식 QLabel (QPixmap 사용)의 크기를 조정하는 방법은 무엇입니까?
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);
온라인 검색 후와 Qt layouts - Keep widget aspect ratio while resizing에서 허용 대답에 제안, 심지어 내 자신의 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();
}
}
그러나 이미지는 여전히 가로 세로 비율을 유지하지 않고 크기가 조정됩니다.
무엇이 여기에 있습니까?
도움이 될 것입니다. 미리 감사드립니다. 여기에 나열된 QLabel의 서브 클래스를 사용하여
이 클래스가 작동합니다. 정의 된 MyLabel과이 AspectRatioPixmapLabel 클래스를 비교해 보면, 주된 원인은 함수 호출을'setScaledContents (true);'로 사용한다는 것입니다. 그것은'setScaledContents (false);'로 설정되어야합니다. 그래서 나는 당신의 도움이되는 대답을 업데이트 할 것을 제안하고 있습니다. –