Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: kadr от Август 17, 2010, 07:41



Название: resize
Отправлено: kadr от Август 17, 2010, 07:41
Привет всем, подскажите, как можно сделать так, что бы при изменении размера окна, все элементы на нем тоже соответсвенно менялись?  ???


Название: Re: resize
Отправлено: Nimbus от Август 17, 2010, 07:54
Вроде как, если виджеты расположены на лейауте, то сами ресайзятся при изменения размеров виджета, на котором расположен лейаут.
Можно также посмотреть про QLayout::setResizeMode


Название: Re: resize
Отправлено: kadr от Август 17, 2010, 08:19
Нет, ничего само не ресайзиться. Мне надо, допустим мышкой растинул форму, и все элементы сразу сами изменились, я просто не знаю какой сигнал использовать!
Расположил все виджеты в лаутах, как теперь сделать что бы они меняли свой размер вместе с основной формой?


Название: Re: resize
Отправлено: crossly от Август 17, 2010, 10:14
подозреваю что забыли назначить лейаут окну...


Название: Re: resize
Отправлено: Sancho_s_rancho от Август 17, 2010, 11:42
Привет всем, подскажите, как можно сделать так, что бы при изменении размера окна, все элементы на нем тоже соответсвенно менялись?  ???
В лэйаутах они сами растягиваются.Если не тянутся - значит в коде ошибка (например не указан родитель).


Название: Re: resize
Отправлено: kadr от Август 17, 2010, 12:40
И как его указать?
ui->gridLayoutWidget->setParent(this);

qDebug() << ui->gridLayoutWidget->parent():
Linux_Comander(0x22fe48, name = "Linux_Comander")


Название: Re: resize
Отправлено: Пантер от Август 18, 2010, 06:32
UI или код выложи.


Название: Re: resize
Отправлено: kadr от Август 18, 2010, 07:02
А что код, у меня в нем про лауты ничего нет, мне просто скажите как сделать так что бы они вместе с основной формой изменяли размер? Сейчас я делаю так:
Код:
void Linux_Comander::resizeEvent(QResizeEvent *e)
{

    QSize newSize = e->size();
    QSize oldSize = e->oldSize();
    QSize s;

    if(newSize == oldSize)
    {
        return;
    }
    else
    {
        s = oldSize;

       ui->gridLayoutWidget->resize(s.width()-15,s.height()-80);
       ui->horizontalLayoutWidget_5->setGeometry(100,s.height()-60,s.width()-105,20);
       ui->horizontalLayoutWidget_2->setGeometry(10,s.height()-30,s.width()-15,23);
    }
 }
но при таком методе есть проблемы, при запуске программы, форма пустая, пока не начнешь менять размер, тогда появляются все элементы формы, и при разворвчивании формы на весь экран, все элементы на форме остаются неизмененными.


Название: Re: resize
Отправлено: Sancho_s_rancho от Август 18, 2010, 08:31
Блин, мочи больше нет. Сделай проще, прочти документацию к Qt и посмотри примеры в каталоге examples и demos. Примеров _вагон_


Название: Re: resize
Отправлено: stump от Август 18, 2010, 11:42
Код:

    QGridLayout *grid = new QGridLayout();
    QTextEdit *text = new QTextEdit();
    QPushButton *button = new QPushButton();

    grid->addWidget(text,0,0,3,2);
    grid->addWidget(button,3,1,1,1);

    this->setLayout(grid);



Название: Re: resize
Отправлено: Nimbus от Август 18, 2010, 12:12
Код:

    QGridLayout *grid = new QGridLayout();
    QTextEdit *text = new QTextEdit();
    QPushButton *button = new QPushButton();

    grid->addWidget(text,0,0,3,2);
    grid->addWidget(button,3,1,1,1);

    this->setLayout(grid);

Подозреваю, что автор пользовался QtDesigner'ом, а не вручную выделял память виджетам и располагал их в лейауте.


Название: Re: resize
Отправлено: kadr от Август 18, 2010, 15:18
Все получилось, нодо было просто добавить: ui->centralWidget->setLayout(ui->main_layt);