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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Таблица с раскрывающийся панелью.  (Прочитано 7380 раз)
updaite
Гость
« : Сентябрь 11, 2014, 02:58 »

Здравствуйте, не как не пойму какой компонент использовать для реализации таблицы как на картинке.

У меня есть структура.
Имя
Фамилия
Отчество
Возраст
Семейное Положение

Нужно создать таблицу с названием колонок.
Имя
Фамилия
Отчество

Заполнить.

При клике на строку в таблицы открыть панель и вывести на этой панели.
Возраст
Семейное Положение

С заполнением я разберусь, но вот с реализацией колонок, показом панели и заполнением ее у меня проблемы.
Покажите как это реализовать.
Сам компонент не нужно создавать динамически.
Записан
Bepec
Гость
« Ответ #1 : Сентябрь 11, 2014, 07:17 »

Ну начнём расстреливать вас откровениями.
Панель будет создаваться динамически.
Для реализации вам нужно изучить делегаты, QTableView. В делегате при нажатии создавать editor -> вашу панель.
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #2 : Сентябрь 11, 2014, 11:13 »

Для реализации вам нужно изучить делегаты, QTableView. В делегате при нажатии создавать editor -> вашу панель.
Ну почему сразу QTableView? Может в данном конкретном случае лучше QTreeView...
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Сентябрь 11, 2014, 11:21 »

Ну почему сразу QTableView? Может в данном конкретном случае лучше QTreeView...
Интересно чем?
Записан

Qt 5.11/4.8.7 (X11/Win)
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #4 : Сентябрь 11, 2014, 11:49 »

Что-то подобное можно реализовать на QtitanDataGrid (http://www.devmachines.com/qtitandatagrid-overview.html), но боюсь, что будет дорого и непросто. Особенно с учетом того, что
Сам компонент не нужно создавать динамически.
Кстати, что бы это значило? Нужно грид на форму положить в дизайнере и там всё мышкой наклепать?
Записан
updaite
Гость
« Ответ #5 : Сентябрь 11, 2014, 17:46 »

Что-то подобное можно реализовать на QtitanDataGrid (http://www.devmachines.com/qtitandatagrid-overview.html), но боюсь, что будет дорого и непросто. Особенно с учетом того, что
Сам компонент не нужно создавать динамически.
Кстати, что бы это значило? Нужно грид на форму положить в дизайнере и там всё мышкой наклепать?

Именно, желательно мышкой всё наклеить. Можно даже и без панели, подумаешь пару столбцов добавить. как такое осуществить с QTableView?
Записан
Bepec
Гость
« Ответ #6 : Сентябрь 11, 2014, 17:58 »

Логику тоже мышкой набросайте. Спасибо за внимание Улыбающийся
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #7 : Сентябрь 11, 2014, 20:53 »

Именно, желательно мышкой всё наклеить.
К сожалению, это тебе надо куда-нибудь в Делфи или C# убегать. С Qt такое не прокатывает: тут только ручками в код - только хардкор. Почему-то эта тема сложных виджетов в Qt практически не развивается. Даже продвинутый на первый взгляд QtitanDataGrid обновляется кое-как, а контора его выпускающая переметнулась на разработку Grid под FireMonkey - даже это недоразумение показалось им более перспективным.
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #8 : Сентябрь 11, 2014, 21:02 »

Ну почему сразу QTableView? Может в данном конкретном случае лучше QTreeView...
Интересно чем?
А разве не очевидно? Древо, два уровня вложенности, детали во второй уровень.
Записан
Bepec
Гость
« Ответ #9 : Сентябрь 11, 2014, 21:32 »

Тут мне скорее видится виджет плавающий поверх таблицы. Проще и не надо модель кочевряжить.
 
Но я с вами соглашусь - treeView мне приятнее - у неё апи более шелковое, чем у table Улыбающийся
Записан
_OLEGator_
Гость
« Ответ #10 : Сентябрь 11, 2014, 21:36 »

Ну да, это же впринципе QTreeView.
Записан
updaite
Гость
« Ответ #11 : Сентябрь 12, 2014, 15:36 »

Ну так подскажите как теперь добавить колонки и заполнить их?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Сентябрь 12, 2014, 17:46 »

  • Создаёшь TreeView/TreeWidget.
  • Создаёшь производный от QStyledItemDelegate делегат и реализуешь paint() и sizeHint().
  • Отрубаешь отрисовку декораций ( setRootIsDecorated( false ) )
  • Добавляешь в корень содержимое
  • На каждый корневой элемент добавляешь пустой под-элемент и выставляешь ему setFirstColumnSpanned()
  • На каждую строчку под-элемента вешаешь делегат ( setItemDelegateForRow ( int row, QAbstractItemDelegate * delegate ) )
  • В paint() делегата отрисовываешь содержимое под-элемента, в sizeHint() возвращаешь размер

Либо совсем по-простому:
Код
C++ (Qt)
#include <QApplication>
#include <QLabel>
#include <QTreeWidget>
#include <QTreeWidgetItem>
 
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTreeWidget tw;
 
tw.setIndentation( 0 );
tw.setColumnCount( 4 );
tw.setRootIsDecorated( false );
 
for( int i = 0; i < 10; i++ )
{
QTreeWidgetItem* item = new QTreeWidgetItem( QStringList() <<
QString( "Item <%1>" ).arg( i + 1, 2, 10, QChar( '0' ) ) << "X" << "Y" << "Z" );
tw.addTopLevelItem( item );
item = new QTreeWidgetItem( item );
item->setFirstColumnSpanned( true );
QLabel* lb = new QLabel;
lb->setText(
"<table cellpadding='10' width='100%'><tr>"
"<td align=center valign=middle><img src='X'></td>"
"<td><table>"
"<tr><td>A1:</td><td>-</td></tr>"
"<tr><td>A2:</td><td>-</td></tr>"
"</table></td>"
"<td><table>"
"<tr><td>B1</td><td>-</td></tr>"
"<tr><td>B2</td><td>-</td></tr>"
"</table></td>"
"</tr></table>" );
lb->setFrameStyle( QFrame::StyledPanel | QFrame::Raised );
tw.setItemWidget( item, 0, lb );
}
 
tw.show();
 
return a.exec();
}
 
« Последнее редактирование: Сентябрь 12, 2014, 18:37 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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