워드 랩을 사용하는 사용자 정의 QLabel이 있습니다. MyWidget 크기를 조정할 때 크기가 바뀌지 만 sizeHint()는 여전히 원래 높이를 반환합니다. 이 게시물에서 수정 프로그램을 시도한 : QLabel cutting off text on resize 레이블의 sizeHint() 여전히 초기 높이를 반환하고 컷오프 텍스트 결과.워드 랩을 사용할 때 qlabel의 sizeHint()가 잘못되었습니다.
TestLabel에서 올바른 sizeHint()를 반환하려면 어떻게해야합니까?
MyWidget::MyWidget(QWidget *parent)
: QFrame(parent)
{
label = new TestLabel(this);
label ->setWordWrap(true);
label ->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
mLayout->addWidget(label);
}
void MyWidget::resizeEvent(QResizeEvent * event)
{
int height = label->heightForWidth(label->width());
label->setMaximumHeight(height);
//label->setMinimumHeight(height); // gets called all the time
label->updateGeometry();
QFrame::resizeEvent(event);
}
TestLabel 클래스의 힌트 (sizehint)는() :
QSize TestLabel::sizeHint() const
{
QSize s = QLabel::sizeHint();
qDebug() << "sizeHint(): " << text() << ": " << s;
return s;
}
QSize TestLabel::minimumSizeHint() const
{
QSize s = QLabel::sizeHint();
qDebug() << "minimumSizeHint(): " << text() << ": " << s;
return s;
}
'sizeHint()'는 레이아웃 시스템이 세계의 모든 공간을 가지고 있다면 위젯이 사용하고자하는 공간에 대한 지시자입니다. 단어 줄 바꿈이 활성화되어 있는지 여부는이 설정에 아무런 영향을 미치지 않습니다. 레이아웃에 "요청한"크기를 얻지 못하면 'QLabel'의 동작을 변경합니다. – Chris