2013-04-08 3 views
3

워드 랩을 사용하는 사용자 정의 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; 
    } 
+0

'sizeHint()'는 레이아웃 시스템이 세계의 모든 공간을 가지고 있다면 위젯이 사용하고자하는 공간에 대한 지시자입니다. 단어 줄 바꿈이 활성화되어 있는지 여부는이 설정에 아무런 영향을 미치지 않습니다. 레이아웃에 "요청한"크기를 얻지 못하면 'QLabel'의 동작을 변경합니다. – Chris

답변

0

나는 QLabel 크기 힌트에 문제가되자 -는 QLabel 텍스트 후 업데이트되지 않았습니다이 변경되었습니다, 그리고 텍스트 후 즉시 필요 (글꼴 메트릭스를 사용하여 텍스트 폭을 얻는 것이 미래 레이블의 픽셀 정확한 크기를 제공하지는 않음). 저를 도왔던 트릭이있었습니다. 가장 안쪽에서 가장 바깥 쪽 (정확하게 그 순서대로)에서 라벨을 포함하는 레이아웃 계층의 모든 레이아웃에 대해 invalidate() 및 activate()를 호출했습니다. 그런 다음 레이블의 sizeHint() 호출이 새롭고 올바른 것을 반환하고있었습니다. 나는 그 두 가지 기능 중 하나가 충분하다는 것을 기억하지만, 나는 어떤 것을 기억하지 못한다. 레이아웃은 코드를 본 사람이라면 Qt에서 상당히 지저분한 부분입니다.

관련 문제