Russian Qt Forum
Ноябрь 14, 2024, 20:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменение положения QSplitter программным путем.  (Прочитано 7041 раз)
darktroll
Гость
« : Июнь 17, 2010, 12:42 »

Есть QSplitter. Он разделяет два компонента, но это не суть. Меня интересует, можно ли программным путем изменить его положение (подвинуть леве-правее так, как бы это делалось путем его "перетаскивания")?
У него есть сигнал, которым можно увидеть его положение относительно формы при перетаскивании: splitterMoved (int pos, int index).
Что интересно, он передает 2 целочисленных значения.
Чтож, создаю этот сигнал. Он передает эти значения в функцию test(pos, index), которая выводит на экран каждое изменение этих параметров:
Код
Python
QtCore.QObject.connect(splitter, QtCore.SIGNAL('splitterMoved(int, int)'), self.test)
 
def test(pos, index):
print pos
print index
 

При перемещении сплиттера руками получаю в консоли что-то типа:
Код
Python
<__main__.TestProg object at 0x9d7c46c>
100
<__main__.TestProg object at 0x9d7c46c>
110
<__main__.TestProg object at 0x9d7c46c>
120
 
Что такое 100,110,120 - это понятно. Это index - перемещение сплиттера. А вот почему вмсето второго целочисленного значения выводится <__main__.TestProg object at 0x9d7c46c> - не пойму. Но это меня мало волнует.

ВОПРОС: Можно ли программно задавать этот самый index, тем самым перемещая сплиттер?

Раз уж есть сигнал, позволяющий отлавливать перемещение, то по идее должна быть и функция, позволяющая изменять положение сплиттера. Но я такой не нашел....
« Последнее редактирование: Июнь 17, 2010, 12:47 от darktroll » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июнь 17, 2010, 12:52 »

Цитировать
Можно ли программно задавать этот самый index, тем самым перемещая сплиттер?
Из Python-а скорее всего так не получится, т.к. есть QSplitter::moveSplitter( int pos, int index ), но он protected.
Но мне кажется, вы заходите не с того конца, т.к. логичнее было бы изменить размеры компонентов.
Записан

Qt 5.11/4.8.7 (X11/Win)
darktroll
Гость
« Ответ #2 : Июнь 17, 2010, 12:56 »

Из Python-а скорее всего так не получится, т.к. есть QSplitter::moveSplitter( int pos, int index ), но он protected.
Да, видел ее. Но работает она как-то странно. Чтобы ей не передавал в параметрах, оно смещает сплиттер в право до предела.
Что-то здесь с параметром pos не то, имхо.... Тип мне его не нравится....
Но мне кажется, вы заходите не с того конца, т.к. логичнее было бы изменить размеры компонентов.
Хм, а я и не подумал.... Спасибо, попробую!  Подмигивающий
« Последнее редактирование: Июнь 17, 2010, 12:59 от darktroll » Записан
darktroll
Гость
« Ответ #3 : Июнь 17, 2010, 13:13 »

Хм, не получается....
Как ни задавай размеры - ничего не происходит.
Пробовал в дизайнере. Создавал два виджета, разделял их сплиттером. Своиство geometry в дизайнере вообще становится серым и не доступным для любого из виджетов. Бред....
Если менять размеры у самого сплиттера, то он увеличивает/уменьшает каждый компонент одинаково, "поровну".
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Июнь 17, 2010, 13:15 »

QSplitter::setSizes ( const QList<int> & list )
Записан

Qt 5.11/4.8.7 (X11/Win)
darktroll
Гость
« Ответ #5 : Июнь 17, 2010, 14:17 »

Да, размеры оно меняет, но я в упор не пойму, по какому закону. Вот у меня 2 виджета, разделенных сплиттером. Сколько мне параметров надо задать в setSizes и каких, чтобы, например, получить отношение длинн виджетов 1:3? Есть зависимость от конкретных размеров формы?
Записан
Crazy Sage
Гость
« Ответ #6 : Июнь 17, 2010, 14:55 »

в списке для setSizes должно быть столько же элементов, сколько виджетов в сплиттере, после чего он им поставит размеры по списку. Удобно вначале сделать getSizes, потому что при попытке изменить суммарную длину\ширину могут начаться глюки.
Записан
darktroll
Гость
« Ответ #7 : Июнь 17, 2010, 21:42 »

Спасибо большое за пояснения! Буду пробовать.  Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 23.