Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Растяжение виджетов

Автор: Гость_Дмитрий_* 30.10.2010, 18:27

Недавно начал изучать QT, пытаюсь накидать просто проект чтобы понять как что работает. И это никак не получается =/

Мне нужно чтобы в шаблоне mainWindow, был компоновщик содержащий к примеру два списка, при этом изменения размеров окна как то отражались на размерах содержимого компоновщика (списках).

Пытаюсь сделать это так:
Создаю проект с шаблоном mainWindow.
В QT Designere:
Добавляю на centralWidget, HorizontalLayout.
В это LayOut запихиваю два списка.

И не могу понять как сделать так, чтобы при изменение размера окна, изменялся размер списков.
У меня получается просто изменение размера окна, никак не меняет размеры списков.

PS: Перепробовал кучи вариантов, мозг просто опух. Ничего не могу понять, все что прочитал противоречиво. Примеры сложные и момент в котором настраивается растяжение запрятан неизвестно где. Подскажите плз как решить поставленную задачу, или хотя бы где можно прочитать (понятным, простым языком) про то как это можно это реализовать.


Автор: Авварон 30.10.2010, 22:18

Омг:( дизайнер - зло.
О5 25 в кратце - есть всего 1 способ расположить виждеты в определенном порядке - нужно взять виджет parent, виджеты child1...childn, взять лайаут layout. Сделать layout.addWidget(childi); добавив виджеты, затем сделать parent->setLayout(layout);
В дизайнере, перетаскивая лайаут на форму, вы создаете дополнительный виджет (к-ый не видно в дизайнере), вешаете ему лайаут и добавляете в него виджет. НО можно кликнуть правый клик по любому виджету и назначить лайаут ему. Тогда все, что лежит на нем, укладывается в соответствии с лайаутом в размеры виджета.

Автор: Гость_Дмитрий_* 31.10.2010, 8:41

Цитата(Авварон @ 30.10.2010, 22:18) *
Омг:( дизайнер - зло.
О5 25 в кратце - есть всего 1 способ расположить виждеты в определенном порядке - нужно взять виджет parent, виджеты child1...childn, взять лайаут layout. Сделать layout.addWidget(childi); добавив виджеты, затем сделать parent->setLayout(layout);
В дизайнере, перетаскивая лайаут на форму, вы создаете дополнительный виджет (к-ый не видно в дизайнере), вешаете ему лайаут и добавляете в него виджет. НО можно кликнуть правый клик по любому виджету и назначить лайаут ему. Тогда все, что лежит на нем, укладывается в соответствии с лайаутом в размеры виджета.

Как я вас понял:
#include <QtGui>
int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QWidget wgt;
    QListWidget* lwA = new QListWidget;
    QListWidget* lwB = new QListWidget;
    QBoxLayout* h1 = new QBoxLayout(QBoxLayout::LeftToRight);
    h1->addWidget(lwA);
    h1->addWidget(lwB);
    wgt.setLayout(h1);
    wgt.show();
    return app.exec();
//Просьба не обращать внимание на небольшую утечку памяти)
}



Действительно растяжение окна изменяет размеры списков. Но как сделать тоже самое в QT Designer'e?

Автор: Гость_Дмитрий_* 31.10.2010, 8:55

Всем спасибо, все понял))))

PS: Извиняюсь за дикую тупость :)

Автор: Litkevich Yuriy 31.10.2010, 9:42

Трёп выделил: http://www.forum.crossplatform.ru/index.php?showtopic=5870

Автор: bvn13 31.10.2010, 13:13

Цитата(Гость_Дмитрий_* @ 31.10.2010, 9:55) *
Всем спасибо, все понял))))

PS: Извиняюсь за дикую тупость :)


Расскажите, плз. Тоже интересно, как это дизайнером делать

Автор: K1L0z 31.10.2010, 15:27

Цитата(bvn13 @ 31.10.2010, 14:13) *
Расскажите, плз. Тоже интересно, как это дизайнером делать

мне то же интересно :mellow:

Автор: Litkevich Yuriy 31.10.2010, 15:32

bvn13, K1L0z, читайте про компоновщики:
http://doc.crossplatform.ru/qt/4.6.x/widgets-and-layouts.html
и http://doc.crossplatform.ru/qt/4.6.x/designer-layouts.html

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)