Форум программистов, компьютерный форум, киберфорум
Наши страницы

Qt

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
Chelioss
181 / 181 / 4
Регистрация: 08.01.2011
Сообщений: 1,137
#1

Как создать список виджетов? - C++ Qt

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

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

Отобразить список моих виджетов на форме - C++ Qt
Всем привет. Не подскажите. Как можно отобразить список собственных виджетов на форме. Вообще задача такая. Нужно вывести имя, фамилию,...

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

Как создать список ссылок? - C++ Qt
При нажатии на кнопку рисуется прямоугольник на сцене(слот slotAdd). не пойму, как сделать список ссылок на все созданные объекты....

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

Есть ли в QT возможность перебора виджетов, как элементов массива? - C++ Qt
возможно я не очень правильно задал вопрос, но вот что меня интересует есть форма с 20 SpinBox'ами есть текстовый файл вида: ...

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

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

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

Как установить styleSheet для всех виджетов, кроме QSizeGrip - C++ Qt
Добрый день! Хочу установить стиль сразу для всех виджетов QWidget {...} но при этом проигнорировать QSizeGrip.

Как сделать ручное перемещение дочерних виджетов по родительскому на сенсорном экране - C++ Qt
Написал одну програмку под комп, на ней есть Qwidget, на котором несколько динамически созданных QGroupBox, которые пользователь может...

Есть составной виджет с кучей дочерних виджетов, как правильно установить eventFilter - C++ Qt
Привет! Есть QFrame с кучей всяких баттонов на нём, хочу сделать обработку событий для всех баттанов в другом классе, пытаюсь установить...

размещение виджетов на площади большей, чем есть у mainwindow (или как настроить скроллы) - C++ Qt
Ситуация - есть программка с графическим интерфейсом в виде одного окна (QMainWindow). В этом окне требуется отобразить всякие виджеты для...


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

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

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