2017-04-18 4 views
0

I 동적 QLabel 화상 상위 this와 크기를 조절하지만, 원래의 화상 종횡비를 유지하도록 this 의해 명명 상위 QWidget 내부라는 QHBLayoutlayout 내부 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의 서브 클래스를 사용하여

답변

0

시도 :

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

희망하는 데 도움이됩니다.

+0

이 클래스가 작동합니다. 정의 된 MyLabel과이 AspectRatioPixmapLabel 클래스를 비교해 보면, 주된 원인은 함수 호출을'setScaledContents (true);'로 사용한다는 것입니다. 그것은'setScaledContents (false);'로 설정되어야합니다. 그래서 나는 당신의 도움이되는 대답을 업데이트 할 것을 제안하고 있습니다. –

0

QLabel 대신 이미지의 크기를 조정하십시오. 예 : 상위 위젯의 resizeEvent를 hangling하고 다음과 같이하면 :

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