Не могу понять как сделать потомка QWidget, такого, чтобы вёл себы в QHBoxLayout как кнопка. Т.е. был фиксирован по высоте, не сжимался бы по ширине меньше заданного размера, и растягивался по ширине на всю область.
Переопределил метод sizeHint():
Здравствуйте, baf, Вы писали:
baf>Не могу понять как сделать потомка QWidget, такого, чтобы вёл себы в QHBoxLayout как кнопка. Т.е. был фиксирован по высоте, не сжимался бы по ширине меньше заданного размера, и растягивался по ширине на всю область. baf>Переопределил метод sizeHint():
baf>
baf>Но не работает. При изменении размеров окна которое содержит мой виджет — мой виджет меняется произвольно. Хотя кнопка ведёт себя как нужно.
baf>Пожалуйста, помогите разобраться. Видимо, я категорически неправильно понимаю QSizePolicy
я думаю, логично было бы внимательно посмотреть SizePolicy у дефолтной кнопки В данном случае вы немного перепутали, надо вот так:
К тому же, есть вот еще один момент. > Т.е. был фиксирован по высоте, не сжимался бы по ширине меньше заданного размера,
минимальный размер можно выставит руками с помощью функции setMinimumSize().
Здравствуйте, romankr, Вы писали: R>я думаю, логично было бы внимательно посмотреть SizePolicy у дефолтной кнопки ;) В данном случае вы немного перепутали, надо вот так: R>
Да, и правда, перепутал. Но этот вариант тоже не работает. R>К тому же, есть вот еще один момент. >> Т.е. был фиксирован по высоте, не сжимался бы по ширине меньше заданного размера, R>минимальный размер можно выставит руками с помощью функции setMinimumSize().
Я сделал по другому — перегрузил minimumSizeHint().
Проблема ещё в том, что sizeHint — у виджета меняется. И так как у кнопки, — когда её размер меняется (допустим при изменении текста), то менеджер компоновки под него подстраивается, — у меня сделать с моим виджетом не получается.
пример иллюстрирующий поведение кнопки, которое я хочу реализовать в своём виджете
Да, надо видимо поковырять код QPushButton в исходниках библиотеки, но толком не понимая принципа сложновато это делать, для этого ещё QLayout и иже с ним ковырять придёться.
Может кто-нибудь уже знает решение моей проблемы?
Моя же задача такая: пользователь открывает картинку из файла, она должна в моём виджете отобразиться, а мой виджет под неё подстроиться. Мой виджет в QHBoxLayout скомпонован с панелью управления. Сейчас мой виджет не меняет размеров и приходиться ручками окно маштабировать, чтобы картинку увидеть.
Re: Как правильно понимать QSizePolicy?
От:
Аноним
Дата:
15.08.12 22:46
Оценка:
У меня пошло!
применял для виджета напрямую.
QWidget *W2 = new QWidget(mainWidget);
W2->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
layout->addWidget(W2);
учитывая заданные минимальные размеры у меня выглядит все ок.
Expanding
Виджет может быть больше или меньше значения, возвращаемого мето-
дом sizeHint(), но класс компоновки постарается предоставлять видже-
ту как можно больше места. Другими словами, виджет может как растяги-
ваться, так и сжиматься, но предпочтительнее его растягивать
Ignored
Значение, возвращаемое методом sizeHint(), не принимается во вни-
мание. Однако класс компоновки постарается предоставлять виджету как
можно больше места
в чем разница? Это при том что sizeHint 3 — мин, мах и просто, но про них в доках ни слова
Здравствуйте, baf, Вы писали:
baf>Проблема ещё в том, что sizeHint — у виджета меняется. И так как у кнопки, — когда её размер меняется (допустим при изменении текста), то менеджер компоновки под него подстраивается, — у меня сделать с моим виджетом не получается.
Надо понимать, чт hint — это подсказка, а не обязательно размер.
baf>Может кто-нибудь уже знает решение моей проблемы?
Выставить правильно QSizePolicy (как выше советовали) и играться в первую очередь с лэйаутами, а не с сайзхинтами. Обратите внимание на методы в лэйауте, которые содержат слова stretch factor. Главное понять, что либо setFixedSize, либо управлять через лэйауты + сайзполиси.