Russian Qt Forum

Qt => Вопросы новичков => Тема начата: stima от Октябрь 25, 2011, 21:10



Название: ScrollArea и VBoxLayout
Отправлено: stima от Октябрь 25, 2011, 21:10
Порыл в гугле и в мануалах, сообразил вот такое

Код:
    mainLayout = new QVBoxLayout(this);

    area = new QScrollArea(this);
    fLayout = new QVBoxLayout(area);
    fLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);

    QPushButton *b;
    for ( int i = 0; i < 20; i++ ) {
        b = new QPushButton(QString("%1").arg(i));
        b->setFixedSize(50, 50);
        fLayout->addWidget(b);
    }

    mainLayout->addWidget(area);
    mainLayout->addWidget(new QPushButton("b"));

    setLayout(mainLayout);

но полоса прокрутки не появляеться, а просто виджет растягиваеться на весь экран.


Название: Re: ScrollArea и VBoxLayout
Отправлено: kambala от Октябрь 25, 2011, 21:49
вместо mainLayout->addWidget(area); надо mainLayout->addLayout(fLayout);


Название: Re: ScrollArea и VBoxLayout
Отправлено: stima от Октябрь 25, 2011, 22:13
Пишет что layout уже имеет parenta.

Вообще идея такова, есть виджет в нем установлен VBoxLayout, в который помещены "область" и кнопка.
Причем в "областе" установлен еще один  VBoxLayout в который добавлены припустим QPushButton.
И нужно чтобы если кнопок было много то в этой "области" появлялся скролл.


Название: Re: ScrollArea и VBoxLayout
Отправлено: kambala от Октябрь 25, 2011, 22:20
setLayout(mainLayout); - убери эту строчку и ругаться не будет

кнопкам надо еще и координату левого верхнего угла смещать в цикле (чтоб они друг на друге не находились): b->setPos(0, 55 * i). и неплохо бы им родителя тоже задавать: b = new QPushButton(QString("%1").arg(i), area);


Название: Re: ScrollArea и VBoxLayout
Отправлено: stima от Октябрь 25, 2011, 22:26
Переписал немного код

Код:
    QVBoxLayout *mainLayout = new QVBoxLayout(this);

    QScrollArea *area = new QScrollArea(this);
    QVBoxLayout *scrollLayout = new QVBoxLayout(area);
    scrollLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);

    QPushButton *b;
    for ( int i = 0; i < 20; i++ ) {
        b = new QPushButton(QString("%1").arg(i), area);
        b->setFixedSize(50, 50);
        scrollLayout->addWidget(b);
    }

    mainLayout->addLayout(scrollLayout);
    mainLayout->addWidget(new QPushButton("b"));

Так вот дело в том, что ругаеться scrollLayout

п.с. Возможно немного не так обьяснил.

Нужно, чтобы в виджете была некоторая скролловая область в которой есть виджеты, и взависимости от количества виджетов появлялся исчезал скрол. Ну и кнопка под этой областью.


Название: Re: ScrollArea и VBoxLayout
Отправлено: kambala от Октябрь 25, 2011, 23:44
хм, ну так напиши: QVBoxLayout *scrollLayout = new QVBoxLayout;


Название: Re: ScrollArea и VBoxLayout
Отправлено: stima от Октябрь 26, 2011, 03:00
c этим разобрался вроде)

сделал так:
Код:
    
    scrollArea = new QScrollArea(this);
    scrollingWdg = new QWidget(scrollArea);

    layout = new QVBoxLayout(scrollingWdg);

    scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    scrollArea->setGeometry(5, 5, 290, this->height());
    setFixedWidth(300);
    ....
    scrollingWdg->setLayout(layout);
    scrollArea->setWidget(scrollingWdg);
Возможно неправильно)), но нужный эффект достигнут.

п.с. теперь узнать бы как qvebview заставить растянуть фото по загруженному url и запретить кликать на фото, чтобы не растягивать.