Russian Qt Forum
Июля 06, 2025, 01:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSplitter в дизайнере  (Прочитано 7320 раз)
Avazart
Гость
« : Мая 22, 2013, 01:29 »

Есть два виджета, между ними сплитер :



При добавлении сплитера виджеты становятся одинаковой высоты.

Мне нужно изменить изначальный размер виджета #2, что бы когда появлялось окно прогаммы, размер был меньше чем виджета #1

Первый виджет-дерево, он должен заполнять основное пространство, второй виджет-текстовое поле, "лог ошибок" - он должен сохранять свою высоту при изменении окна программы, но должна быть возможность изменять его высоту с помощью перемещения самого сплитера.

Можно ли уменьшить изначальную высоту второго виджета  ( соотношение высот виджетов ) ?

P.S. QtCreator, Qt5.0.2, Win7
Записан
Figaro
Гость
« Ответ #1 : Мая 22, 2013, 03:59 »

В 5-ке не знаю, но в 4-ке:

Для виджетов №1 и №2 устанавливаешь QSizePolicy->setVerticalStretch в нужных пропорциях, как-то так.
Записан
Avazart
Гость
« Ответ #2 : Мая 22, 2013, 14:19 »

А как конкретно? Так как пробовал не работает...

Изменение setVerticalStretch ни как не влияет на размеры при изменении в дизайнере.
« Последнее редактирование: Мая 22, 2013, 14:23 от Avazart » Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #3 : Мая 22, 2013, 14:38 »

У меня тоже не получилось. Сделал вручную в конструкторе формы примерно так:
Код:
    splitter->setStretchFactor(0,0);
    splitter->setStretchFactor(1,1);
    QList<int> sizes;
    splitter->setSizes(sizes << 100 << 200);
Причем второй размер ни на что не влияет.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Avazart
Гость
« Ответ #4 : Мая 22, 2013, 15:20 »

Вообще не понятно вот нашел похожую тему http://www.prog.org.ru/topic_8738_0.html

Код:
splitter->setSizes(QList<int>() << 1 << 5);

QList<int>()  это размеры или соотношения ?

Код:
splitter->setStretchFactor(0,0);
splitter->setStretchFactor(1,1);

Зачем такие манипуляции ?


Я попробовал код - вышло все наоборот высота верхнего виджета уменьшилась
Записан
Figaro
Гость
« Ответ #5 : Мая 22, 2013, 17:07 »

Не для сплиттера, а для виджетов плюс одному QSizePolicy::Expanding поставить...
Записан
Avazart
Гость
« Ответ #6 : Мая 22, 2013, 18:28 »

Цитировать
Не для сплиттера, а для виджетов плюс одному QSizePolicy::Expanding поставить...
Так я и ставил для верхнего виджета  1, и политика QSizePolicy::Expanding тоже стоит у обоих виджетов...

Толку ноль...
« Последнее редактирование: Мая 22, 2013, 18:46 от Avazart » Записан
Figaro
Гость
« Ответ #7 : Мая 23, 2013, 04:57 »

минимально компилируемый код в студию, проверю правда на 4.8.3
Записан
Avazart
Гость
« Ответ #8 : Мая 23, 2013, 13:55 »

Решил

[CPP]ui->splitter->setStretchFactor(0,1);
ui->splitter->setStretchFactor(1,0);

ui->splitter->setSizes(QList<int>()<<20<<50);[/CPP]

Но совсем не понятно как оно работает, как высчитывает размеры по setSizes(), эксперименты с "размерами" не помогли.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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