Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: kilanoff от Февраль 12, 2011, 22:01



Название: Как сделать, что бы widget растягивался на 100% по высоте и ширине?
Отправлено: kilanoff от Февраль 12, 2011, 22:01
есть в общем окно, в нем есть тулбар и остальное пустое место должно быть замощено ScrollArea

например в той же Delphi можно установить свойство Align:=alClient; и тогда объект заполнит свободное пространство

как в Qt UI Сделать также?


Название: Re: Как сделать, что бы widget растягивался на 100% по высоте и ширине?
Отправлено: Fat-Zer от Февраль 12, 2011, 22:11
читайте про лейауты


Название: Re: Как сделать, что бы widget растягивался на 100% по высоте и ширине?
Отправлено: kdm от Февраль 12, 2011, 22:17
Пока набирал ответ уже появился. Но все же...

Использовать менеджеры размещения: QHBoxLayout, QVBoxLayout, QGridLayout, они могут управлять автоматически размерами виджетов, основываясь на политике размера (size policy) виджета.

Ну или для такого примера можно создать QMainWindow (там и место под тулбар и под статусбар уже заделано) и установть mainwindow.setMainWidget(scrollarea).

Но всеравно автоматическим изменением размеров виджетов занимаются потомки QLayout. В асситанте набери Layout Classes, там все должно быть расписано.


Название: Re: Как сделать, что бы widget растягивался на 100% по высоте и ширине?
Отправлено: santaclaus от Февраль 12, 2011, 22:23
как в Qt UI Сделать также?

если делаешь через QtCreator форму, тогда выдели главное окошко куда сложенны компоненты и далее на панели инструментов "Скомпоновать по сетке" Ctl+G.

Если взял QWidget и сам внутри все прописываешь, то читай как указали выше про QLayout.

Вот пример как внутри работать с выравниванием:

Код:
//пишем в нашем окошке где хотим сделать выравнивание
QGridLayout* pgLayout = new QGridLayout; //создание элемента выравнивания для формы
pgLayout->addWidget(groupBoxButton, 0, 0);// добавляем группу кнопок
pgLayout->addWidget(exitButton, 1, 0); //добавляем ниже кнопку выхода
    
setLayout(pgLayout); //говорим нашей форме что бы использовала созданное выравнивание


Название: Re: Как сделать, что бы widget растягивался на 100% по высоте и ширине?
Отправлено: kilanoff от Февраль 13, 2011, 14:33
реализовал в resizeEvent у окна
там и задаю размеры виджета, который должен быть растянут на 100% 100%
Код:
void MainWindow::resizeEvent(QResizeEvent *event)
{
    int w = width();
    int h = height();
    int ht = ui->toolBar->height();

    ui->scrollArea->setGeometry(0,0,w,h-ht);
}


Название: Re: Как сделать, что бы widget растягивался на 100% по высоте и ширине?
Отправлено: Fat-Zer от Февраль 13, 2011, 14:39
реализовал в resizeEvent у окна
там и задаю размеры виджета, который должен быть растянут на 100% 100%
Код:
void MainWindow::resizeEvent(QResizeEvent *event)
{
    int w = width();
    int h = height();
    int ht = ui->toolBar->height();

    ui->scrollArea->setGeometry(0,0,w,h-ht);
}

и как обычно желание сделать всё через жопу перевешивает желание учиться...


Название: Re: Как сделать, что бы widget растягивался на 100% по высоте и ширине?
Отправлено: kilanoff от Февраль 13, 2011, 16:13
реализовал в resizeEvent у окна
там и задаю размеры виджета, который должен быть растянут на 100% 100%
Код:
void MainWindow::resizeEvent(QResizeEvent *event)
{
    int w = width();
    int h = height();
    int ht = ui->toolBar->height();

    ui->scrollArea->setGeometry(0,0,w,h-ht);
}

и как обычно желание сделать всё через жопу перевешивает желание учиться...

уж извините


Название: Re: Как сделать, что бы widget растягивался на 100% по высоте и ширине?
Отправлено: kilanoff от Февраль 13, 2011, 16:20
сделал на лайауте, норм) всем спасибо!