Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/30: Рейтинг темы: голосов - 30, средняя оценка - 4.87
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
1

Как создать список виджетов?

22.12.2013, 07:00. Показов 6200. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мне надо вывести список фильмов(картинка, актеры, описание и т.д.), как на сайтах кинотеатров показывают список фильмов(репертуар).
Получается, что в каждом элементе списка будут виджеты для вывода изображения и текстов.
Читал про model view архитектуру, но так и не понял.
Вижу только один вариант: в виджете создавать много виджетов в виде списка, а в этих виджетах делать описание фильма. Может есть более простой способ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2013, 07:00
Ответы с готовыми решениями:

Отобразить список моих виджетов на форме
Всем привет. Не подскажите. Как можно отобразить список собственных виджетов на форме. Вообще...

Создать класс «Квартира», в котором список комнат реализовать как односвязный список
Добрый день,написал фот такой клас по заданию:Создать класс «Квартира», в котором список комнат...

Создать список целых чисел. Создать новый список, записав в него отрицательные элементы
Создать список целых чисел. Создать новый список, записав в него отрицательные элементы.(задачу...

Как создать список?
Нужно просто создать список(пожалуйста с подробностями)

13
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
22.12.2013, 09:02 2
В QScrollArea вставляем QLayout и в него виджеты. Вот вам и список.
1
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
22.12.2013, 10:48 3
QML+Модель данных
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.12.2013, 17:01  [ТС] 4
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
QML+Модель данных
К сожалению, нет времени на это разбираться.

Сделал так:
Создается список groupbox'ов, в которых будут размещаться информация о фильмах(пока просто три радио кнопки).
Эти groupbox'ы находятся в главном layout'е.
Как сделать так, чтобы этот layout можно было скролить? Добавил ScrollArea и установил что скролить (setLayout(мой главный layout)). Но ничего не появляется.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
customerwindow::customerwindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::customerwindow)
{
    ui->setupUi(this);
    ui->verticalLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
    for(int i = 0; i < 20; ++i) {
 
        QGroupBox *groupB = new QGroupBox(tr("Exclusive Radio Buttons"));
 
        QVBoxLayout *vbox = new QVBoxLayout;
        QRadioButton *radio1 = new QRadioButton(tr("&Radio button 1"));
        QRadioButton *radio2 = new QRadioButton(tr("R&adio button 2"));
        QRadioButton *radio3 = new QRadioButton(tr("Ra&dio button 3"));
        vbox->addWidget(radio1);
        vbox->addWidget(radio2);
        vbox->addWidget(radio3);
        vbox->addStretch(1);
        groupB->setLayout(vbox);
        ui->verticalLayout->addWidget(groupB);
    }
    ui->scrollArea->setLayout(ui->verticalLayout);
}
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
22.12.2013, 17:33 5
В QScrollArea нужно вставить не лайоут, а виджет. При создании QScrollArea в дизайнере он и так там есть.
Вот в него нужно добавить лайоут с вашими виджетами.
Так же нужно растянуть этот самый виджет, к примеру через setFixedSize. Так как он должен быть больше самого QScrollArea, иначе что тогда скролить.
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.12.2013, 18:14  [ТС] 6
Цитата Сообщение от RazrFalcon Посмотреть сообщение
В QScrollArea нужно вставить не лайоут, а виджет. При создании QScrollArea в дизайнере он и так там есть.
Вот в него нужно добавить лайоут с вашими виджетами.
Так же нужно растянуть этот самый виджет, к примеру через setFixedSize. Так как он должен быть больше самого QScrollArea, иначе что тогда скролить.
Создал в дизайнере ScrollArea. На него положил Widget, а на него вертикальный layout.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
customerwindow::customerwindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::customerwindow)
{
    ui->setupUi(this);
 
    ui->verticalLayout->setSizeConstraint(QLayout::SetFixedSize);
 
    for(int i = 0; i < 50; ++i) {
        QGroupBox *groupB = new QGroupBox(tr("Exclusive Radio Buttons"), ui->widget);
 
        QHBoxLayout *fbox = new QHBoxLayout;
 
        QRadioButton *radio1 = new QRadioButton(tr("&Radio button 1"));
        QRadioButton *radio2 = new QRadioButton(tr("R&adio button 2"));
        fbox->addWidget(radio1);
        fbox->addWidget(radio2);
 
        groupB->setLayout(fbox);
        ui->verticalLayout->addWidget(groupB);
 
    }
}
Что-то я никак не пойму, что тут не так.

Добавлено через 7 минут
Скролить я хочу то, что не помещается в вертикальный layout.
В дезайнере скролареа, виджет и верт. layout одного размера. Или надо по другому?
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
22.12.2013, 18:15 7
1) Нужно указать что setWidgetResizable(false), у QScrollArea.
2) Если вы имена по умолчанию не меняли, то:
ui->scrollAreaWidgetContents->setFixedSize(1000, 1000);

Теперь должны появится скролбары, ну а дальше на ваше усмотрение.
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.12.2013, 18:27  [ТС] 8
Странно. Скрол скролит что-то другое, но не вертикальный layout. В вертикальном layout'е показываются только те групбоксы с радио кнопками, которые влезли в изначальный размер виджет и layout, который лежит в этом виджете.
Миниатюры
Как создать список виджетов?  
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
22.12.2013, 18:44 9
Не понял в чем проблема, но попробуйте задавать минимальный размер вашим QGroupBox, а размер виджета в скроле не трогать.
Тогда эти самый QGroupBox сами растянут виджет-родитель.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.12.2013, 19:07  [ТС] 10
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Не понял в чем проблема, но попробуйте задавать минимальный размер вашим QGroupBox, а размер виджета в скроле не трогать.
Тогда эти самый QGroupBox сами растянут виджет-родитель.
Лайаут пытается все групбоксы разместить в себе, сплющивая эти групбоксы.
Установил миним. размер груп бокса и указал лайауту, чтобы он учитывал эти мин. размеры:
C++ (Qt)
1
ui->verticalLayout->setSizeConstraint(QLayout::SetMinimumSize);
но теперь в лайауте только столько групбоксов, сколько помещается. Т.е. лайут не хочет менять своего размера, чтобы все можно было поместить, а потом скролить.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.12.2013, 19:09  [ТС] 11
Вот так выглядит все:
тут видно, что лайаут не меняет своего размера.
Миниатюры
Как создать список виджетов?   Как создать список виджетов?  
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.12.2013, 19:24  [ТС] 12
Вроде разобрался. Надо просто у виджета, на котором находится лайаут, тоже изменить размер:
C++ (Qt)
1
ui->widget->resize(1000, 1000);
Теперь только осталось придумать как сделать так, чтобы размер виджет и скролареа были динамическими взависимости от кол-во групбоксов.
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
22.12.2013, 19:34 13
По идее родитель лайоута должен растягиваться в зависимости от размеров дочерних виджетов.
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.12.2013, 20:38  [ТС] 14
Попробовал такое написать:
C++ (Qt)
1
ui->widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
гле ui->widget - это виджет, на котором размещен лауаут. Не сработало.

Тогда буду в ручную вычислять размер относительно кол-ва групбоксов и задавать размер виджету.
0
22.12.2013, 20:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2013, 20:38
Помогаю со студенческими работами здесь

Перебор виджетов как массив
У меня есть много QLabel'лов. Имена у них kn_0.....kn_31. Их предок QHBoxLayout knki. Мне...

Как изменять параметры виджетов?
Такая проблема, допустим мне нужно, чтобы при запуске приложения происходила какая-нибудь анимация....

Как создать список номеров которыми можно управлять как базой данных
Привет Полный новичок в программировании, вопрос по Delphi Как создать список номеров,...

Создать список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2
Описать процедуру, которая формирует список L, включив в него по одному разу элементы, которые ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru