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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Победить Layout в дизайнере  (Прочитано 17397 раз)
oxotnik
Гость
« : Июнь 26, 2009, 15:44 »

Имеется форма, кидаю на нее 2 QGroupBox, по высоте их растягиваю на всю форму, по ширине - таким образом, что ширина левого получатся ~1/2 ширины правого.
Выставляю форме горизонтальный Layout, в дизайнере все прекрасно - пропорции GroupBox-ов сохраняются
Запускаю форму - получаю одинаковую ширину GroupBox-ов.
В документации сказано:
Цитировать
Однажды задав логическое расположение, вы получаете следующие преимущества:
    * Позиционирование дочерних виджетов.
    * По умолчанию устанавливаются разумные размеры окон.
    * Разумные минимальные размеры окон.
    * Обработка изменения размеров.
    * Автоматическое обновление при смене следующих параметров содержимого:
как мне добится в рантайме, того что бы сохранились пропорции GroupBox-ов ?
Записан
spectre71
Гость
« Ответ #1 : Июнь 26, 2009, 16:03 »

Имеется форма, кидаю на нее 2 QGroupBox, по высоте их растягиваю на всю форму, по ширине - таким образом, что ширина левого получатся ~1/2 ширины правого.
Выставляю форме горизонтальный Layout, в дизайнере все прекрасно - пропорции GroupBox-ов сохраняются
Запускаю форму - получаю одинаковую ширину GroupBox-ов.
В документации сказано:
Цитировать
Однажды задав логическое расположение, вы получаете следующие преимущества:
логическое расположение сначала надо задать! Улыбающийся
Сначала кладешь Layout, а потом в него свои GroupBox, далее настраиваешь Layout на нужные пропорции.
Почитай доку по Layout. Посмотри примеры.
Записан
oxotnik
Гость
« Ответ #2 : Июнь 26, 2009, 16:20 »

логическое расположение сначала надо задать! Улыбающийся
Сначала кладешь Layout, а потом в него свои GroupBox, далее настраиваешь Layout на нужные пропорции.
Почитай доку по Layout. Посмотри примеры.
Смотрел в примерах webkit\previewer\previewer.ui
там форме назначен горизонтальный Layout, и на самой форме лежат GroupBox-ы и разделены Splitter-ом (к стати, если на форму кинуть Layout то в нем спрлиттер не ставится)
делал по образу и подобию, однако в примерах работает, у меня никак  Обеспокоенный
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июнь 26, 2009, 16:56 »

>>как мне добится в рантайме, того что бы сохранились пропорции GroupBox-ов ?
В рантайме всё будет также как и в дизайнере. Ни какой разницы.
Если получил разницу, значит делаешь не так как расказываешь, давай подробности в плоть до щелчков мыши (когда, и куда)

>>логическое расположение сначала надо задать!
>>Сначала кладешь Layout, а потом в него свои GroupBox, далее настраиваешь Layout на нужные пропорции.
Не надо так делать. Ты получшь лишний компоновщик.
Записан

Юра.
spectre71
Гость
« Ответ #4 : Июнь 26, 2009, 17:03 »

>>логическое расположение сначала надо задать!
>>Сначала кладешь Layout, а потом в него свои GroupBox, далее настраиваешь Layout на нужные пропорции.
Не надо так делать. Ты получшь лишний компоновщик.
Это смотря что он вообще хочет добиться.

UI  в студию!
Записан
oxotnik
Гость
« Ответ #5 : Июнь 26, 2009, 17:07 »

Создаю новый проект (форму)
Кидаю на форму 2 GroupBox
Делаю им размеры (какие хочу получить в пропорциях) мышкой растягиваю

Выделяю их (2 GroupBox)
Нажимаю на сплиттер (из 2 GroupBox получается маленькая синяя точка на форме)
Правой кнопкой на форме, в меню Layout=>Layout of Horizontaly (синяя точечка превращается в 2 GroupBox, расположенных как надо и растянутых в соответствии с пропорциями)
Все.
В дизайнере все прекрасно отображается
Запускаю - размеры одинаковые

Так в дизайнере получается:

|------------------|
|      |              |
|      |              |
|      |              |
|      |              |
|------------------|


Так в рантайме:

|-------------------|
|          |           |
|          |           |
|          |           |
|          |           |
|-------------------|
« Последнее редактирование: Июнь 26, 2009, 17:13 от oxotnik » Записан
oxotnik
Гость
« Ответ #6 : Июнь 26, 2009, 17:08 »

UI  в студию!
XML или ui_...*h ?


Код
C++ (Qt)
       MainWindow->resize(746, 619);
       QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
       sizePolicy.setHorizontalStretch(0);
       sizePolicy.setVerticalStretch(0);
       sizePolicy.setHeightForWidth(MainWindow->sizePolicy().hasHeightForWidth());
       MainWindow->setSizePolicy(sizePolicy);
       centralWidget = new QWidget(MainWindow);
       centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
       horizontalLayout = new QHBoxLayout(centralWidget);
       horizontalLayout->setSpacing(6);
       horizontalLayout->setMargin(11);
       horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
       splitter = new QSplitter(centralWidget);
       splitter->setObjectName(QString::fromUtf8("splitter"));
       splitter->setOrientation(Qt::Horizontal);
       groupBox = new QGroupBox(splitter);
       groupBox->setObjectName(QString::fromUtf8("groupBox"));
       splitter->addWidget(groupBox);
       groupBox_2 = new QGroupBox(splitter);
       groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
       splitter->addWidget(groupBox_2);
 
       horizontalLayout->addWidget(splitter);
 
       MainWindow->setCentralWidget(centralWidget);
       menuBar = new QMenuBar(MainWindow);
       menuBar->setObjectName(QString::fromUtf8("menuBar"));
       menuBar->setGeometry(QRect(0, 0, 746, 19));
       MainWindow->setMenuBar(menuBar);
       statusBar = new QStatusBar(MainWindow);
       statusBar->setObjectName(QString::fromUtf8("statusBar"));
       MainWindow->setStatusBar(statusBar);
« Последнее редактирование: Июнь 26, 2009, 17:12 от oxotnik » Записан
spectre71
Гость
« Ответ #7 : Июнь 26, 2009, 17:45 »

1) Поскольку у тебя не заданы(каким-либо образом) пропорции для groupBox, то при изменении размеров окна они будут ресайзится пропорционально!

2) Это ОДНОЗНАЧНО прикол дизайнера!!! При запуске все правильно!

Дизайнер не может записать текущие положения разделителей, поскольку только программно, через setSizes, и естественно такого свойства не может быть, можно задать текущее положение разделителей!
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Июнь 26, 2009, 19:37 »

>>Делаю им размеры (какие хочу получить в пропорциях) мышкой растягиваю
Если ты не задаёшь политику размеров, то это бесполезно, компоновщик будет управлять размерами.

>>Нажимаю на сплиттер (из 2 GroupBox получается маленькая синяя точка на форме)
Splitter - Разделитель - частный случай компоновщика. Ты не указал политику размера (как можно уменьшать), он и уменьшил до безобразия.
« Последнее редактирование: Июнь 26, 2009, 19:40 от lit-uriy » Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Июнь 26, 2009, 19:38 »

>>XML или ui_...*h ?
ui, он и есть XML. А c++ файл мы и сами из него получим.
Записан

Юра.
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #10 : Июнь 26, 2009, 20:16 »

В вашем случае не подойдет жесткое задание ширины для одного из групп-боксов? - скажем для левого ставите maxWidth= XXX и он уже не растянегтся более чем XXX. Для правого ничего не ставите и он будет занимать оставшуюся часть - если я правильно понимаю то настраивая политики - там виджеты все равно будут стремиться к некоторому заранее заданному идеальному размеру.
Записан
oxotnik
Гость
« Ответ #11 : Июнь 26, 2009, 21:15 »

Так как можно в дизайнере (без ручного кодирования) сделать так, что бы один из виджетов по умолчанию был вдвое (втрое, и т.п. любой коэффициент ) уже другого (соседнего) виджета?
Как политики размеров настраивать?
ЗЫ: max...Size не подходит - в рантайме надо по разному их ресайзить.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #12 : Июнь 26, 2009, 22:01 »

grid layout?
Записан
MoPDoBoPoT
Гость
« Ответ #13 : Июнь 26, 2009, 22:35 »

Так как можно в дизайнере (без ручного кодирования) сделать так, что бы один из виджетов по умолчанию был вдвое (втрое, и т.п. любой коэффициент ) уже другого (соседнего) виджета?
Как политики размеров настраивать?
ЗЫ: max...Size не подходит - в рантайме надо по разному их ресайзить.

У компановщика есть свойство layoutStretch, в нем через запятую указываются факторы растяжки  идущих по порядку виджетов. Например, если у нас в горизонтальном компановщике 2 виджета и мы хотим достичь отношения 1:2, то надо просто в проперти написать 1,2
Записан
VIMSVEI
Гость
« Ответ #14 : Июль 02, 2009, 10:50 »

А у меня почему то у компановщика нет такого свойства  Непонимающий
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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