Qt4: Квадратный элемент layout'а (Крокодил более длинный, чем широкий)

Модератор: Модераторы разделов

dergachev
Сообщения: 847
ОС: archlinux

Qt4: Квадратный элемент layout'а

Сообщение dergachev »

Подскажите, пожалуйста. Вот есть два виджета, один - справа, другой - слева. Задача - сделать так, чтобы тот, что слева, был "как можно более квадратным", то есть чтобы было так, как на прикрепленном рисунке: красный виджет всегда квадратный, и не растет по горизонтали, если по вертикали расти некуда; синий виджет растягивается по вертикали и имеет фиксированный размер по горизонтали (что есть свойство самого виджета), и всегда находится сразу после красного, то есть если красный не хочет расти вбок, то пустое место оказывается справа от синего виджета, а не между ними.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Qt4: Квадратный элемент layout'а

Сообщение NickLion »

Ну, с синим виджетом проблем нет - ставим минимальную и максимальную ширину, а справа от него Spacer горизонтальный. С красным вот пока что-то ничего умнее своего Layout в голову не пришло.
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Qt4: Квадратный элемент layout'а

Сообщение RasenHerz »

Думаю аккуратнее всего получится сделать задуманное написав свой компоновщик, но если хочется топорного решения можете переопределить resizeEvent() у родительской формы.
Спасибо сказали:
dergachev
Сообщения: 847
ОС: archlinux

Re: Qt4: Квадратный элемент layout'а

Сообщение dergachev »

Эхх ... пока что отделался вот таким грязным хаком:

Код: Выделить всё

void Window::resizeEvent(QResizeEvent *.*event*/) {
    layout->setColumnStretch(0,height());
    layout->setColumnStretch(1,width()-height());
}
Это гарантирует почти квадратность левого виджета. Немного тормозит.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Qt4: Квадратный элемент layout'а

Сообщение Crazy »

Я бы переопределил resizeEvent, sizeHint, sizePolicy в классе красного виджета.

Desipere in loco
Спасибо сказали: