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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как добавить QScrollArea  (Прочитано 7562 раз)
thechicho
Гость
« : Май 25, 2013, 13:10 »

Код:
    QGroupBox *groupBoxChoiceRegion = new QGroupBox(dialog);
    groupBoxChoiceRegion->setTitle("Выбор региона:");
    groupBoxChoiceRegion->setObjectName("groupBoxChoiceRegion");

    QGridLayout *gridLayoutChoiceRegion = new QGridLayout(groupBoxChoiceRegion);
    gridLayoutChoiceRegion->setObjectName("gridLayoutChoiceRegion");
    gridLayoutChoiceRegion->setSizeConstraint(QLayout::SetFixedSize);

есть QGroupBox. на него динамически будут добавляться QPushButton, которые будут выравниваться QGridLayout.
как мне добавить QScrollArea, чтобы если кнопок будет много, можно было воспользоваться полосой прокрутки?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Май 25, 2013, 13:50 »

Как то так Улыбающийся Не проверял, но должно работать Улыбающийся
Код:
QGridLayout *gridLayoutChoiceRegion = new QGridLayout();

QScrollArea *scrollArea = new QScrollArea();
scrollArea->setLayout(gridLayoutChoiceRegion);

QVBoxLayout *vBoxLayout = new QVBoxLayout();
vBoxLayout->addWidget(scrollArea);

QGroupBox *groupBoxChoiceRegion = new QGroupBox(dialog);
groupBoxChoiceRegion->setLayout(vBoxLayout);
Записан

thechicho
Гость
« Ответ #2 : Май 25, 2013, 14:38 »

не разобрался. не могли бы вы у себя проверить появится или нет полоса прокрутки, при добавлении кнопок на виджет?
я не пойму как связать лэйауты, виджеты и QScrollArea Непонимающий
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Май 25, 2013, 16:11 »

Добавляйте на gridLayoutChoiceRegion кнопки и все Улыбающийся
Записан

thechicho
Гость
« Ответ #4 : Май 25, 2013, 16:27 »

падает. возможно, я неверно добавляю.
у вас работает такой способ?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Май 25, 2013, 16:30 »

Киньте этот код в main.cpp Подмигивающий
Код:
    QWidget *widget = new QWidget();

    // Кнопки будут размещены Grid layout
    QGridLayout *gLayoutChoiceRegion = new QGridLayout();

    for(int i = 0; i < 10; i++)
        for(int j = 0; j < 10; j++)
            gLayoutChoiceRegion->addWidget(new QPushButton(QString("%1-%2")
                                                           .arg(i).arg(j)),
                                           i, j);
    
    // Располагаться будут на виджете
    QWidget *widgetChoiceRegion = new QWidget();
    widgetChoiceRegion->setLayout(gLayoutChoiceRegion);

    // Помещаем виджет с кнопками в скролл зону
    QScrollArea *scrollArea = new QScrollArea();
    scrollArea->setFrameShape(QFrame::NoFrame);
//    scrollArea->setWidgetResizable(true);
    scrollArea->setWidget(widgetChoiceRegion);

    
    // Для размещения скролл-зоны с кнопками на group box
    // нужно будет создать еще один компоновщик - компоновщик group box
    // поместим на нем скролл-зону
    QVBoxLayout *vBoxLayout = new QVBoxLayout();
    vBoxLayout->addWidget(scrollArea);

    QGroupBox *groupBoxChoiceRegion = new QGroupBox();
    groupBoxChoiceRegion->setTitle("Group Box");
    groupBoxChoiceRegion->setLayout(vBoxLayout);


    QVBoxLayout *vBoxLayoutMain = new QVBoxLayout();
    vBoxLayoutMain->addWidget(groupBoxChoiceRegion);

    widget->setLayout(vBoxLayoutMain);

    widget->show();
« Последнее редактирование: Май 25, 2013, 16:44 от gil9red » Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Май 25, 2013, 16:31 »

Проще делать такое не самому руками, а через дизайнер Улыбающийся

Для того чтобы scrollarea начала скроллить, нужно ей не компоновщик (layout) подавать, а виджет
« Последнее редактирование: Май 25, 2013, 16:36 от gil9red » Записан

thechicho
Гость
« Ответ #7 : Май 25, 2013, 17:17 »

компоновщики - это вынос мозга.
у меня диалог создается, у него компоновщик QGridLayout.
так я добавляю QGroupBox
Код:
gridLayoutDialog->addWidget(groupBoxChoiceRegion, 0, 1, 2, 1);

когда я пытался добавить QScrollArea

и в слоте динамически добавлять кнопки

Код:
QGridLayout *gridLayoutChoiceRegion = dialog->findChild<QGridLayout *>("gridLayoutChoiceRegion");
gridLayoutChoiceRegion->addWidget(new QPushButton(city.region, groupBoxChoiceRegion), i - row, column);

прога падала.
возможно я неправильно добавил QScrollArea
возможно, мне не хватало
Код:
QWidget *widgetChoiceRegion = new QWidget();
widgetChoiceRegion->setLayout(gLayoutChoiceRegion);

спасибо за пример, посмотрю еще может заработает как и хотелось.
хотя я уже решил, что лучше для данной задачи будет использовать QStackedWidget.
выводить определенное количество кнопок, что не помещается выводить на другой странице QStackedWidget.
добавить кнопки назад, далее, с помощью которых просматривать регионы.
но тоже возникла трудность с добавлением кнопок на QStackedWidget.
не пойму как добавить допустим 30 кнопок на 1 страницу, следующие 30 на другую и тп.
тоже как-то через компоновщики это делается, наверное...
создавать как вы посоветовали
Код:
QWidget *widgetChoiceRegion = new QWidget();
на нем размещать нужное количество кнопок и уже его добавлять в QStackedWidget...
блин, почему все так запутано Шокированный
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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