Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Chelioss
182 / 182 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
1

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

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

Мне надо вывести список фильмов(картинка, актеры, описание и т.д.), как на сайтах кинотеатров показывают список фильмов(репертуар).
Получается, что в каждом элементе списка будут виджеты для вывода изображения и текстов.
Читал про model view архитектуру, но так и не понял.
Вижу только один вариант: в виджете создавать много виджетов в виде списка, а в этих виджетах делать описание фильма. Может есть более простой способ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2013, 07:00
Ответы с готовыми решениями:

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

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

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

Как создать список ссылок?
При нажатии на кнопку рисуется прямоугольник на сцене(слот slotAdd). не...

QDialog как контейнер для виджетов
Всем привет. В общем стоит задача сделать кастомную тень для диалогов. Есть...

13
RazrFalcon
1388 / 1245 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
22.12.2013, 09:02 2
В QScrollArea вставляем QLayout и в него виджеты. Вот вам и список.
1
Dmitriy_M
1429 / 1309 / 131
Регистрация: 20.03.2009
Сообщений: 4,680
Записей в блоге: 11
22.12.2013, 10:48 3
QML+Модель данных
0
Chelioss
182 / 182 / 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
RazrFalcon
1388 / 1245 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
22.12.2013, 17:33 5
В QScrollArea нужно вставить не лайоут, а виджет. При создании QScrollArea в дизайнере он и так там есть.
Вот в него нужно добавить лайоут с вашими виджетами.
Так же нужно растянуть этот самый виджет, к примеру через setFixedSize. Так как он должен быть больше самого QScrollArea, иначе что тогда скролить.
1
Chelioss
182 / 182 / 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
RazrFalcon
1388 / 1245 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
22.12.2013, 18:15 7
1) Нужно указать что setWidgetResizable(false), у QScrollArea.
2) Если вы имена по умолчанию не меняли, то:
ui->scrollAreaWidgetContents->setFixedSize(1000, 1000);

Теперь должны появится скролбары, ну а дальше на ваше усмотрение.
1
Chelioss
182 / 182 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.12.2013, 18:27  [ТС] 8
Странно. Скрол скролит что-то другое, но не вертикальный layout. В вертикальном layout'е показываются только те групбоксы с радио кнопками, которые влезли в изначальный размер виджет и layout, который лежит в этом виджете.
0
Миниатюры
Как создать список виджетов?  
RazrFalcon
1388 / 1245 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
22.12.2013, 18:44 9
Не понял в чем проблема, но попробуйте задавать минимальный размер вашим QGroupBox, а размер виджета в скроле не трогать.
Тогда эти самый QGroupBox сами растянут виджет-родитель.
0
Chelioss
182 / 182 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.12.2013, 19:07  [ТС] 10
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Не понял в чем проблема, но попробуйте задавать минимальный размер вашим QGroupBox, а размер виджета в скроле не трогать.
Тогда эти самый QGroupBox сами растянут виджет-родитель.
Лайаут пытается все групбоксы разместить в себе, сплющивая эти групбоксы.
Установил миним. размер груп бокса и указал лайауту, чтобы он учитывал эти мин. размеры:
C++ (Qt)
1
ui->verticalLayout->setSizeConstraint(QLayout::SetMinimumSize);
но теперь в лайауте только столько групбоксов, сколько помещается. Т.е. лайут не хочет менять своего размера, чтобы все можно было поместить, а потом скролить.
0
Chelioss
182 / 182 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.12.2013, 19:09  [ТС] 11
Вот так выглядит все:
тут видно, что лайаут не меняет своего размера.
0
Миниатюры
Как создать список виджетов?   Как создать список виджетов?  
Chelioss
182 / 182 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.12.2013, 19:24  [ТС] 12
Вроде разобрался. Надо просто у виджета, на котором находится лайаут, тоже изменить размер:
C++ (Qt)
1
ui->widget->resize(1000, 1000);
Теперь только осталось придумать как сделать так, чтобы размер виджет и скролареа были динамическими взависимости от кол-во групбоксов.
0
RazrFalcon
1388 / 1245 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
22.12.2013, 19:34 13
По идее родитель лайоута должен растягиваться в зависимости от размеров дочерних виджетов.
1
Chelioss
182 / 182 / 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2013, 20:38

Как наследоваться от виджетов, нарисованных в QtDesigner?
Привет! Вот нарисовал я на CentralWidget (ну главный виджет формы) какой - то...

Как создать виждет выпадающий список кнопок?
Подскажите как создать виждет подобного вида:

Есть ли в QT возможность перебора виджетов, как элементов массива?
возможно я не очень правильно задал вопрос, но вот что меня интересует есть...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru