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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: ScrollArea и VBoxLayout  (Прочитано 3492 раз)
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);

но полоса прокрутки не появляеться, а просто виджет растягиваеться на весь экран.
Записан
kambala
Джедай : наставник для всех
*******
Online Online

Сообщений: 4727



Просмотр профиля WWW
« Ответ #1 : Октябрь 25, 2011, 21:49 »

вместо mainLayout->addWidget(area); надо mainLayout->addLayout(fLayout);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
stima
Гость
« Ответ #2 : Октябрь 25, 2011, 22:13 »

Пишет что layout уже имеет parenta.

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

Сообщений: 4727



Просмотр профиля WWW
« Ответ #3 : Октябрь 25, 2011, 22:20 »

setLayout(mainLayout); - убери эту строчку и ругаться не будет

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
stima
Гость
« Ответ #4 : Октябрь 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

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

Нужно, чтобы в виджете была некоторая скролловая область в которой есть виджеты, и взависимости от количества виджетов появлялся исчезал скрол. Ну и кнопка под этой областью.
« Последнее редактирование: Октябрь 25, 2011, 22:29 от stima » Записан
kambala
Джедай : наставник для всех
*******
Online Online

Сообщений: 4727



Просмотр профиля WWW
« Ответ #5 : Октябрь 25, 2011, 23:44 »

хм, ну так напиши: QVBoxLayout *scrollLayout = new QVBoxLayout;
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
stima
Гость
« Ответ #6 : Октябрь 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 и запретить кликать на фото, чтобы не растягивать.
« Последнее редактирование: Октябрь 26, 2011, 03:04 от stima » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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