2012-05-06 2 views
9

Я использую QLabel и QPLineEdit в QStackedWidget, QLable должен быть почти размером окна, содержащего этот виджет.QLabel потребляет слишком много места

Но когда я устанавливаю дополнительный длинный текст в QLabel, он слишком сильно расширяется, и я не могу уменьшить размер окна по горизонтали, минимальная ширина была слишком большой.

Я установил размер политики этих трех виджетов на Minimum, это просто не сработает для меня.

UPDATE

может быть, это лучше, говоря так: как позволить QLabel дисплей часть текста, когда не хватает места

ОБРАЗЦА КОД

#include <QtGui> 

int main (int argc , char **argv) 
{ 
    QApplication app (argc , argv); 

    QWidget w; 
    QLabel *label = new QLabel ("Very very very long text"); 
    label->setSizePolicy (QSizePolicy::Minimum , QSizePolicy::Fixed); 
    QVBoxLayout layout (&w); 
    layout.addWidget (label); 
    w.show(); 
    return app.exec(); 
} 
+0

Почему вы не даете вашей этикетки максимальную ширину? – Mat

+0

@Mat это похоже на окно IM, я не хочу, чтобы пользователи получали большую «минимальную ширину» этого приложения. – daisy

+0

Да, почему бы вам не установить максимальную ширину для этой метки? – Mat

ответ

11

Если я правильно поняли, простейшая вещь - просто игнорировать подсказку горизонтального размера этого ярлыка.
До тех пор, пока у вас есть другие виджеты там (или заставить минимальную ширину вручную контейнера), это должно делать то, что вы хотите:

#include <QtGui> 

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv); 

    QLabel *l1 = new QLabel("This very long text doesn't influence " 
          "the width of the parent widget"); 
    l1->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); 
    // Style just to make it clear that the widget is 
    // being resized to fit the parent, it doesn't "overflow" 
    l1->setFrameShape(QFrame::Box); 
    l1->setFrameShadow(QFrame::Raised); 
    l1->setAlignment(Qt::AlignHCenter); 

    QLabel *l2 = new QLabel("This influences the width"); 
    l2->setFrameShape(QFrame::Box); 
    l2->setFrameShadow(QFrame::Raised); 

    QWidget w; 
    QVBoxLayout layout(&w); 
    layout.addWidget(l1); 
    layout.addWidget(l2); 
    w.show(); 
    return app.exec(); 
} 
+0

отличный ответ. Большое спасибо! – Phil

Смежные вопросы