Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Куда пропал QSplitter->setResizeMode() в QT4? 
V
    Опции темы
featZima
Дата 20.2.2009, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2008
Где: Украина, Харьков

Репутация: нет
Всего: нет



Пытаюсь повторить интерфейс FChat-а. В Delphi всё делается просто: на форму кладётся TListView, для него Align=alRight, после кладётся TSplitter, для него Align=alRight, потом кладётся любой элемент, для него Align=alClient и всё работает как надо. При изменении размеров окна ширина списка чётко зафиксирована, при желании пользователь может её изменить, потянув за сплиттер.

Для Qt сплошные дебри... Использую QSpiltter на всю форму, на него кладу два фрейма, одному в политику размера ставлю Fixed, другому Expanded, но при изменении размера формы, тянуться оба.... Нагуглил функциb QSplitter::SetRiseziMode() и QSplitter::KeepSize(), но их в qt4 почему то нет. 

Подскажите как реализовать?

http://floomby.ru/content/3OWYk0U6rE/
PM MAIL WWW ICQ GTalk Jabber   Вверх
SABROG
Дата 20.2.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



maximum size width поставь нужного тебе размер. Fixed работает только когда дело не доходит до растягивания layout'a, отсюда и косяки. Правда есть свойство layoutSizeConstraint, но к сожалению ограничение задается одновременно и по высоте и по ширине.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
featZima
Дата 20.2.2009, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2008
Где: Украина, Харьков

Репутация: нет
Всего: нет



Срабатывает, но только ширина списка тогда замирает навсегда, и сплиттер уже не может её изменить в большую сторону. 
PM MAIL WWW ICQ GTalk Jabber   Вверх
SABROG
Дата 20.2.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(featZima @  20.2.2009,  11:21 Найти цитируемый пост)
Срабатывает, но только ширина списка тогда замирает навсегда, и сплиттер уже не может её изменить в большую сторону.


Цитата(featZima @  20.2.2009,  02:12 Найти цитируемый пост)
При изменении размеров окна ширина списка чётко зафиксирована,


Цитата(featZima @  20.2.2009,  02:12 Найти цитируемый пост)
при желании пользователь может её изменить, потянув за сплиттер.

Сорри, недопонял поначалу.

setResizeMode пропал в эту сторону:

Код

void QSplitter::setResizeMode ( QWidget * widget, ResizeMode mode )
Use setStretchFactor() instead.
For example, if you have code like
 splitter->setResizeMode(firstChild, QSplitter::KeepSize);
 splitter->setResizeMode(secondChild, QSplitter::Stretch);
you can rewrite it as
 splitter->setStretchFactor(splitter->indexOf(firstChild), 0);
 splitter->setStretchFactor(splitter->indexOf(secondChild), 1);


Код

void QSplitter::setStretchFactor ( int index, int stretch )
Updates the size policy of the widget at position index to have a stretch factor of stretch.
stretch is not the effective stretch factor; the effective stretch factor is calculated by taking the initial size of the widget and multiplying it with stretch.
This function is provided for convenience. It is equivalent to
 QWidget *widget = splitter->widget(index);
 QSizePolicy policy = widget->sizePolicy();
 policy.setHorizontalStretch(stretch);
 policy.setVerticalStretch(stretch);
 widget->setSizePolicy(policy);


Это сообщение отредактировал(а) SABROG - 20.2.2009, 11:58


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
featZima
Дата 20.2.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2008
Где: Украина, Харьков

Репутация: нет
Всего: нет



Спасибо большое, это именно то, что надо)
PM MAIL WWW ICQ GTalk Jabber   Вверх
SABROG
Дата 20.2.2009, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(featZima @ 20.2.2009,  13:29)
Спасибо большое, это именно то, что надо)

Ладно, колись как оно работает? И horizontal stretch выставил в 1 (разница видна только в дизайнере, а при preview все-равно обе половинки ровные). И horizontal fixed policy поставил для фрейма. Если сплиттер отвести влево и менять размер окна тягая правую рамку, то все-равно размеры правого фрейма меняются...


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
featZima
Дата 20.2.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2008
Где: Украина, Харьков

Репутация: нет
Всего: нет



В дизайнере не всегда всё выглядит так как будет ^^ Я создал проект в QCreator-е

при создании формы нужно выполнить следующий код
Код

ui->splitter->setStretchFactor(0,1); //блокируем ширину подчинённого виджета
QList<int> list; 
list.push_back(1); 
list.push_back(70); //устанавливаем ширину подчинённого виджета
ui->splitter->setSizes(list); 


P.S. я не до конца  понимаю почему именно так, но работает... Больше всего меня смущает то, что в setStrechFactor надо указывать индекс 0, для виджета, а при указании размера, индекс 1...
P.S.2. кажется понял.... в setStrechFactor индексы соответсвуют порядку в инспекторе объектов, а в setSizes индексы ссответсвуют порядку отображения виджетов на экране...

Это сообщение отредактировал(а) featZima - 20.2.2009, 16:06
PM MAIL WWW ICQ GTalk Jabber   Вверх
SABROG
Дата 20.2.2009, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



stretch factor это значение, которое указывает на то какую часть свободной площади будет занимать виджет по отношению к другим виджетам. Например если поставить одному фрейму horizontalStretch 1, а второму фрему 2. То первый будет занимать 1/3 свободной площади, а второй фрейм 2/3 свободной площади. Ты не обязан задавать этот фактор через сплиттер, можешь тупо прописать его в свойствах фреймов в дизайнере.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
featZima
Дата 21.2.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2008
Где: Украина, Харьков

Репутация: нет
Всего: нет



SABROG, спасибо за ценные советы ;) Вот что у меня получилось...
http://floomby.ru/content/xAesmxgKEW/

Это сообщение отредактировал(а) featZima - 21.2.2009, 14:39
PM MAIL WWW ICQ GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0472 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.