Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ QComboBox, предоставление возможности пользователю изменять размер выпадающего списка

Автор: SABROG 10.12.2008, 17:26

Многие пользователи IE замечали, что у выпадающего списка combobox'a (option) можно менять размеры, однако у стандартных элементов Windows (API) такого уголка нет. Он также не используется в стандартном QComboBox'e. Вот способ, как его добавить:

    QSizeGrip *szg = new QSizeGrip(ui.comboBox);
    ui.comboBox->view()->setCornerWidget(szg);





Несмотря на то, что решение кажется простым и легким, чтобы его найти я сегодня потратил целый день. Скажу лишь, что есть второй способ это сделать без setCornerWidget, но он полон подводных камней, типа расположения уголка в левой верхней части вместо нижней правой, это решается через layout()->addWidget() с нужными параметрами выравнивания, однако возникает другой косяк с тем, что QBoxLayout (используемый по умолчанию в QListView) делит видимую область выпадающего списка на две равные половины, а это мне победить не удалось ни установкой максимальных размеров ни приминением sizePolicy.

http://wiki.crossplatform.ru/index.php/Изминение_размера_у_popup_списка_QComboBox

Автор: Litkevich Yuriy 10.12.2008, 18:21

SABROG, ты не мог бы добавить это в нашу Вики, точнее в http://wiki.crossplatform.ru/index.php/Qt/FAQ

Автор: SABROG 10.12.2008, 18:54

Цитата(Litkevich Yuriy @ 10.12.2008, 18:21) *
SABROG, ты не мог бы добавить это в нашу Вики, точнее в http://wiki.crossplatform.ru/index.php/Qt/FAQ


Добавил. Правда как картинку впихнуть так и не понял, внешние ссылки не работают видимо (html тэги не пробывал).

Автор: Litkevich Yuriy 10.12.2008, 19:11

Цитата(SABROG @ 10.12.2008, 21:54) *
как картинку впихнуть так и не понял
картинку надо сначала загрузить (ссылка "Загрузить файл" в боковом меню), а после загрузки сослаться на него.

---
добавил картинку

Автор: Tonal 15.12.2008, 12:12

Про растягивание: если ни один из скроллеров не виден, то и уголок не появится.
Чтобы он гарантированно появлялся, нужно сделать один из скроллеров всегда видимым, например вертикальный:

ui.comboBox->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

Автор: Litkevich Yuriy 15.12.2008, 12:37

а тут пожалуй и нормально, если содержимое не умещается, то линейка прокрутки появляется автоматом, тогда и уголок будет.

Автор: Tonal 16.12.2008, 13:17

Вертикальная - да, а горизонтальная там всегда задизаблина.
Так что есть есть длинная строка то уголок не помешает. :)

Автор: SABROG 16.12.2008, 13:40

Цитата(Tonal @ 16.12.2008, 13:17) *
Вертикальная - да, а горизонтальная там всегда задизаблина.
Так что есть есть длинная строка то уголок не помешает. :)

Добавил в вики. Кстати вот как у Microsoft SQL Server Management Studio уголок реализован в property view. Тут уже setCorner'ом не обойдешься :)


Автор: Litkevich Yuriy 16.12.2008, 16:06

Цитата(SABROG @ 16.12.2008, 16:40) *
вот как у Microsoft SQL Server Management Studio уголок реализован
как-то неудачно, не с той стороны для правши.

Автор: Litkevich Yuriy 31.1.2009, 12:14

Один из читателей вики утверждает, что этот приём не работает в Линуксе, может кто-нибудь проверить?

Автор: void* 31.1.2009, 13:18

проверю когда буду свободен

Автор: rich 3.2.2009, 21:32

вот что в убунте получилось

зы : видюшка окошка не прикрепилась :( сори size 209533 байт

Автор: Litkevich Yuriy 3.2.2009, 22:23

Положи куда-нибудь, например на narod.ru, а сюда ссылку

Автор: rich 4.2.2009, 21:18

Цитата(Litkevich Yuriy @ 3.2.2009, 22:23) *
Положи куда-нибудь, например на narod.ru, а сюда ссылку

http://narod.ru/disk/5463347000/s-hhi.ogg.html

Автор: Litkevich Yuriy 4.2.2009, 22:10

да уж, точно ерунда какая-то.

Автор: SABROG 4.2.2009, 22:11

У меня такой эффект был при ручном добавлении QSizeGrip в layout QComboBox'a. Победить не удалось, поэтому появился вариант setCornerWidget. Кстати еще наблюдал глюк в дизайнере, когда sizegrip у statusbar'a был вверх-ногами. Походу глючный он.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)