Название: Изменение положения QSplitter программным путем. Отправлено: darktroll от Июнь 17, 2010, 12:42 Есть QSplitter. Он разделяет два компонента, но это не суть. Меня интересует, можно ли программным путем изменить его положение (подвинуть леве-правее так, как бы это делалось путем его "перетаскивания")?
У него есть сигнал, которым можно увидеть его положение относительно формы при перетаскивании: splitterMoved (int pos, int index). Что интересно, он передает 2 целочисленных значения. Чтож, создаю этот сигнал. Он передает эти значения в функцию test(pos, index), которая выводит на экран каждое изменение этих параметров: Код
При перемещении сплиттера руками получаю в консоли что-то типа: Код Что такое 100,110,120 - это понятно. Это index - перемещение сплиттера. А вот почему вмсето второго целочисленного значения выводится <__main__.TestProg object at 0x9d7c46c> - не пойму. Но это меня мало волнует. ВОПРОС: Можно ли программно задавать этот самый index, тем самым перемещая сплиттер? Раз уж есть сигнал, позволяющий отлавливать перемещение, то по идее должна быть и функция, позволяющая изменять положение сплиттера. Но я такой не нашел.... Название: Re: Изменение положения QSplitter программным путем. Отправлено: GreatSnake от Июнь 17, 2010, 12:52 Цитировать Можно ли программно задавать этот самый index, тем самым перемещая сплиттер? Из Python-а скорее всего так не получится, т.к. есть QSplitter::moveSplitter( int pos, int index ), но он protected.Но мне кажется, вы заходите не с того конца, т.к. логичнее было бы изменить размеры компонентов. Название: Re: Изменение положения QSplitter программным путем. Отправлено: darktroll от Июнь 17, 2010, 12:56 Из Python-а скорее всего так не получится, т.к. есть QSplitter::moveSplitter( int pos, int index ), но он protected. Да, видел ее. Но работает она как-то странно. Чтобы ей не передавал в параметрах, оно смещает сплиттер в право до предела.Что-то здесь с параметром pos не то, имхо.... Тип мне его не нравится.... Но мне кажется, вы заходите не с того конца, т.к. логичнее было бы изменить размеры компонентов. Хм, а я и не подумал.... Спасибо, попробую! ;)Название: Re: Изменение положения QSplitter программным путем. Отправлено: darktroll от Июнь 17, 2010, 13:13 Хм, не получается....
Как ни задавай размеры - ничего не происходит. Пробовал в дизайнере. Создавал два виджета, разделял их сплиттером. Своиство geometry в дизайнере вообще становится серым и не доступным для любого из виджетов. Бред.... Если менять размеры у самого сплиттера, то он увеличивает/уменьшает каждый компонент одинаково, "поровну". Название: Re: Изменение положения QSplitter программным путем. Отправлено: GreatSnake от Июнь 17, 2010, 13:15 QSplitter::setSizes ( const QList<int> & list )
Название: Re: Изменение положения QSplitter программным путем. Отправлено: darktroll от Июнь 17, 2010, 14:17 Да, размеры оно меняет, но я в упор не пойму, по какому закону. Вот у меня 2 виджета, разделенных сплиттером. Сколько мне параметров надо задать в setSizes и каких, чтобы, например, получить отношение длинн виджетов 1:3? Есть зависимость от конкретных размеров формы?
Название: Re: Изменение положения QSplitter программным путем. Отправлено: Crazy Sage от Июнь 17, 2010, 14:55 в списке для setSizes должно быть столько же элементов, сколько виджетов в сплиттере, после чего он им поставит размеры по списку. Удобно вначале сделать getSizes, потому что при попытке изменить суммарную длину\ширину могут начаться глюки.
Название: Re: Изменение положения QSplitter программным путем. Отправлено: darktroll от Июнь 17, 2010, 21:42 Спасибо большое за пояснения! Буду пробовать. ;)
|