Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: Avazart от Мая 22, 2013, 01:29



Название: QSplitter в дизайнере
Отправлено: Avazart от Мая 22, 2013, 01:29
Есть два виджета, между ними сплитер :

(http://s020.radikal.ru/i714/1305/ef/a9fc9158298e.png)

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

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

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

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

P.S. QtCreator, Qt5.0.2, Win7


Название: Re: QSplitter в дизайнере
Отправлено: Figaro от Мая 22, 2013, 03:59
В 5-ке не знаю, но в 4-ке:

Для виджетов №1 и №2 устанавливаешь QSizePolicy->setVerticalStretch в нужных пропорциях, как-то так.


Название: Re: QSplitter в дизайнере
Отправлено: Avazart от Мая 22, 2013, 14:19
А как конкретно? Так как пробовал не работает...

Изменение setVerticalStretch ни как не влияет на размеры при изменении в дизайнере.


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


Название: Re: QSplitter в дизайнере
Отправлено: Avazart от Мая 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);

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


Я попробовал код - вышло все наоборот высота верхнего виджета уменьшилась


Название: Re: QSplitter в дизайнере
Отправлено: Figaro от Мая 22, 2013, 17:07
Не для сплиттера, а для виджетов плюс одному QSizePolicy::Expanding поставить...


Название: Re: QSplitter в дизайнере
Отправлено: Avazart от Мая 22, 2013, 18:28
Цитировать
Не для сплиттера, а для виджетов плюс одному QSizePolicy::Expanding поставить...
Так я и ставил для верхнего виджета  1, и политика QSizePolicy::Expanding тоже стоит у обоих виджетов...

Толку ноль...


Название: Re: QSplitter в дизайнере
Отправлено: Figaro от Мая 23, 2013, 04:57
минимально компилируемый код в студию, проверю правда на 4.8.3


Название: Re: QSplitter в дизайнере
Отправлено: Avazart от Мая 23, 2013, 13:55
Решил

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

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

Но совсем не понятно как оно работает, как высчитывает размеры по setSizes(), эксперименты с "размерами" не помогли.