Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: White Owl от Март 03, 2009, 20:45



Название: [Qt 4.5] QSplitter в Designer
Отправлено: White Owl от Март 03, 2009, 20:45
1) Можно ли, и если можно то как, задать относительные размеры виджетов внутри QSplitter когда рисуешь диалог в designer?
Понимаю что можно это сделать в программе, но...

2) В Qt3 был метод QSplitter::setResizeMode(), чем его заменили в Qt4?


Название: Re: [Qt 4.5] QSplitter в Designer
Отправлено: Rcus от Март 03, 2009, 21:27
1. sizePolicy -> H/V Stretch. /*Assistant -> stretch factor*/
2. Assistant -> QSplitter -> Qt 3 Support Members.


Название: Re: [Qt 4.5] QSplitter в Designer
Отправлено: White Owl от Март 04, 2009, 23:29
Ok.... читаю про stretch factor и ничего не понимаю! Слишком там все кратко и всего с одним примером.
Вот прикладываю ui над которым я издеваюсь.
Как в нем, не выходя из Дизайнера задать что отношение левой части (с деревом) к правой (с группой виджетов внутри лайута) должно быть 1:5? Чтобы uic при генерации ui_test.h написал что-то в духе:
splitter->setSizes(QList<int> <<1 <<5);

В главе Porting from Qt 3 to Qt 4, в описании изменений в QSplitter написано:
Цитировать
The function setResizeMode() has been moved into Qt3Support. Set the stretch factor in the widget's size policy to get equivalent functionality.
Спрашивается, как именно надо задать эти самые size policy если я хочу получить тот же эффект, что в Qt3 после: splitter->setResizeMode(treeWidget, QSplitter::KeepSize)??? Что я туда не ставлю - размер виджета все равно меняется при изменении размеров диалога.


Название: Re: [Qt 4.5] QSplitter в Designer
Отправлено: Rcus от Март 05, 2009, 09:15
1. см. приложение.
На второй вопрос ответ есть по указаниям, но чтобы не мучить вас разыменованием приведу прямую ссылку http://doc.trolltech.com/4.5/qsplitter-qt3.html#setResizeMode


Название: Re: [Qt 4.5] QSplitter в Designer
Отправлено: White Owl от Март 05, 2009, 20:36
ага... с дизайнером понял. Вы превратили правую часть сплитера из QVBoxLayout в QWidget которому уже можно поставить цифру в stretch factor. Нуууу... в принципе, работает. Хотя оно в итоге конфликтует с моей второй проблемой.
За прямую ссылку спасибо, чувствую что я бы ее еще долго искал.
В итоге решил поставить в своем диалоге stretch factor в 0 и 1 соответсвенно чтобы запретить дереву самопроизвольно расти, а начальные размеры виджетов внутри сплиттера буду задавать уже в коде. Получилось такое:
Код:
MyDialog::MyDialog(QWidget *parent) : QDialog(parent) {
   setupUi(this);
   splitter->setSizes(QList<int>() << 1 << 5);
   splitter->restoreState(settings->value("splitter").toByteArray());
   .... etc
}
По хорошему, эти самые начальные размеры должны бы быть отдельной пропертью у QSplitter, но увы.