Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 03.12.2011
Сообщений: 43

Таблица с виджетами

10.09.2012, 12:14. Показов 4241. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите в какую сторону смотреть....

Нужно сделать таблицу в которой будут различные виджеты

ну скажем таблица 3х3, в ней в первом столбце Qlabel, во втором ниспадающий список, а третем скажем QPixmap
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2012, 12:14
Ответы с готовыми решениями:

ПодТаблицы с данными(Таблица-Таблица-Таблица-Таблица) и наследованием
Имеется такая база с таблицами Район-МО-Цель-Зачача. Несколько вариантов связей передумал уже, но не понимаю как сделать, чтоб данные не...

Qt работа с виджетами
Совсем недавно начал изучать qt designer. Долго не могу найти ответ на вопрос как изменять виджеты (текст лейбла например). Получалось...

Сайдбар с виджетами без ul-li
Уже задолбался разбираться с этим сайдбаром на виджетах. По-умолчанию блоки строятся на маркированном списке, а это строковые элементы, что...

13
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
10.09.2012, 13:03
Может, QGridLayout использовать? Его можно прямо в дизайнере на окно повесить.
1
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
10.09.2012, 13:06
или использовать делегатаы для QTableView\Widget
0
0 / 0 / 1
Регистрация: 03.12.2011
Сообщений: 43
10.09.2012, 13:26  [ТС]
вот хочу посмотреть в сторону QTableView .....правда пока не знаю с какой стооны к нему подойти)
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
10.09.2012, 14:23
QTableView\QAbstractItemModel и QAbstractItemDelegate спасут отца советской демократии
0
0 / 0 / 1
Регистрация: 03.12.2011
Сообщений: 43
11.09.2012, 01:45  [ТС]
в общем сделал табличку пока с одним своим делегатом в виде комбобокса....
но когда я щелкая по нему он почему то открывается в отдельном окне и потом после выбора скрывается обратно в таблицу....

вот код:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
class ComboBoxDelegate : public QItemDelegate
{
  Q_OBJECT
public:
 ComboBoxDelegate(QObject *parent = 0);
 
 QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; 
 
 void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
 
 void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index);
 
};
реализация:

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
24
25
26
27
28
29
#include "ComboBoxDelegate.h"
#include <QtGui>
 
ComboBoxDelegate::ComboBoxDelegate(QObject *parent) : QItemDelegate(parent) 
{} 
 
QWidget * ComboBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStringList strList;
    strList << (QString::fromLocal8Bit("0 (Без оценки)")) << (QString::fromLocal8Bit("0 (-----------)"))  << (QString::fromLocal8Bit("0: не зачет"));
    QComboBox* editor = new QComboBox;
    editor->addItems(strList);
    editor->setEditable(false);
 
    return editor;
}
 
void ComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index)const
{
 QComboBox *box = static_cast<QComboBox*>(editor);
 QString tempStr = box->currentText();
 int val = box->currentIndex();
 model->setData(index, tempStr, Qt::DisplayRole);
}
 
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index)
{
 editor->setGeometry(option.rect);
}
ну и main

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "ComboBoxDelegate.h"
#include <QtGui/QApplication>
 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QStandardItemModel model(4, 2);
    QTableView tableView;
    tableView.setModel(&model);
    ComboBoxDelegate del;
   
    tableView.setItemDelegate(&del);
    tableView.horizontalHeader()->setStretchLastSection(true);
    
    //tableView.setItemDelegateForColumn(0, &del);
 
        
    tableView.show();
    return app.exec();
}
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
11.09.2012, 09:58
Цитата Сообщение от Dark2012 Посмотреть сообщение
он почему то открывается в отдельном окне и потом после выбора скрывается обратно в таблицу....
это как? скриншоты в студию
0
0 / 0 / 1
Регистрация: 03.12.2011
Сообщений: 43
11.09.2012, 11:31  [ТС]
Вот так вот(((
Миниатюры
Таблица с виджетами  
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
11.09.2012, 11:50
фига се... круто однако)))
есть подозрение, что не задаете parent-а для делегата

Добавлено через 47 секунд
ну и соответственно при создании виджета, то же нужно задать парента ;-)
0
0 / 0 / 1
Регистрация: 03.12.2011
Сообщений: 43
11.09.2012, 12:05  [ТС]
можно поподробнее???
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
11.09.2012, 12:26
Цитата Сообщение от Dark2012 Посмотреть сообщение
C++ (Qt)
1
2
3
QStringList strList;
* * strList << (QString::fromLocal8Bit("0 (Без оценки)")) << (QString::fromLocal8Bit("0 (-----------)")) *<< (QString::fromLocal8Bit("0: не зачет"));
* * QComboBox* editor = new QComboBox;
сюда пишите:
C++ (Qt)
1
QComboBox* editor = new QComboBox(this);
Цитата Сообщение от Dark2012 Посмотреть сообщение
C++ (Qt)
1
2
tableView.setModel(&model);
* * ComboBoxDelegate del;
сюда пишите:
C++ (Qt)
1
ComboBoxDelegate del(&tableView);
может быть поможет
0
0 / 0 / 1
Регистрация: 03.12.2011
Сообщений: 43
11.09.2012, 13:38  [ТС]
да все верно, но проблема решилась, только нужно было передавать parent - a в конструктор виджета делегата (combobox)

C++ (Qt)
1
QComboBox* editor = new QComboBox(parent);
Добавлено через 50 минут
а подскажите какой метод использовать если я хочу установить делегат только в одну конкретную ячеку таблицы

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QStandardItemModel model(4, 2);
    QTableView tableView;
    tableView.setModel(&model);
        ComboBoxDelegate del(&tableView);
   
  
    tableView.horizontalHeader()->setStretchLastSection(true);
        tableView.setItemDelegateForColumn(0, &del);
 
 
    
    tableView.show();
    return app.exec();
}
Сейчас у меня с помощью метода setItemDelegateForColumn(0, &del); - делегпат устанавливается только в первую колонку..... а я хочу чтобы в указанную ячейку....
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
11.09.2012, 15:18
к сожалению такого метода нет..

Добавлено через 1 минуту
я в таких случаях каждый раз устанавливал разные делегаты (динамически менял) для разных колонок\строк, если найдете более простой способ - пишите, буду крайне благодарен информации
0
0 / 0 / 1
Регистрация: 03.12.2011
Сообщений: 43
11.09.2012, 15:29  [ТС]
думаю покопаться в исходниках...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.09.2012, 15:29
Помогаю со студенческими работами здесь

Доступ между виджетами
Здравствуйте. Есть MainWindow и много виджетов которые встраиваются друг в друга(и соответственно в MainWindow). Я хотел бы...

Странности в Хроме с виджетами
Время от времени в Хроме с виджетами сайта- Компьютерный форум и Форум о софте творятся странности. То показывают одни и те же темы в обоих...

Удаление вместе с дочерними виджетами
Доброго времени суток. С Qt работаю недавно, причем, если быть точным, не Qt, а PyQt. Но объектная модель там та же самая, поэтому,...

Зазоры между виджетами на QGraphicsScene
На QgraphicsScene я вплотную положил несколько виджетов. При изменении размеров окна между виджетами появляются зазоры в 1 пиксель....

Как взаимодействовать между виджетами?
Итак, у меня есть куча классов, в которых описываются разные кастомные элементы - немного измененный меню бар, кнопки, и так далее. Все эти...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru