Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: kolob от Декабрь 14, 2012, 17:25



Название: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Декабрь 14, 2012, 17:25
Добрый день уважаемое сообщество.
Есть у меня небольшая тема для обсуждения. Может быть кто с этим сталкивался, но на просторах сети я не нашел примера.
Вот в чем задача создать таблицу, но не простую - столбцы и колонки, а немного усложненную (скрин прилагаю.)
И в эту таблицу данные не просто выгружаются, но приходится добавлять новые строки, которые могут находится в разных группах и разделах, а также удаление и редактирование.
Первое мое решение в QTableWidget каждой строке находилась отдельная таблица QTableWidget, представляющая раздел верхнего уровня, а в ее строке таблица представляющая Группу и в неё же далее добавляется строка с данными. Но как то это решение мне уже не особо нравится с увеличением этих QTableWidget.
Т.е. структура такова:
Цитировать
Диалог и в нем QTableWidget
                      |
                      +-строка это QTableWidget - header
                                         |
                                         +-строка это QTableWidget - group
                                         |                  |
                                         |                  +-строка это QTableWidgetItem - мы
                                         +-строка это QTableWidget - group
и т.д.
Короче налепил я много чего.
Хотел бы узнать, может быть как то иначе это все можно сделать?

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


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: Bepec от Декабрь 14, 2012, 17:40
Разве древовидная модель не позволяет сделать это?

Хм. Могу ошибаться, но где то уже реализовывалось такое в темах.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Декабрь 14, 2012, 17:43
Цитировать
Разве древовидная модель не позволяет сделать это?

Вы предлагаете использовать MVC. Но а как же быть со строками которых в модели нет и не может быть, а которые добавляются непосредственно в tablewidget например сумма по элементам в группе?

Цитировать
Хм. Могу ошибаться, но где то уже реализовывалось такое в темах.
если найдете скинте ссылку посмотреть.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: lit-uriy от Декабрь 14, 2012, 18:50
>Но а как же быть со строками которых в модели нет
дак сделать свою модель.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Декабрь 14, 2012, 23:05
Цитировать
дак сделать свою модель.
Своя модель это конечно хорошо. Но когда много таких форм где таблицы могут (~15-20) отличатся по структуре. Для каждой создавать модель, как то накладно будет.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: Bepec от Декабрь 15, 2012, 11:56
Значит нужно создать свою универсальную модель. От которой бушь наследоваться и создавать свои. Или же интерпретатор напиши. Чтобы допустим текст в определённом формате конвертировался в данные для таблицы.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Декабрь 16, 2012, 09:29
а что вы скажите, если банально использовать QTableWidget и добавлять туда строки с данными из БД


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: Bepec от Декабрь 16, 2012, 10:11
Ничего не скажу :D Вполне возможно.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Декабрь 16, 2012, 10:26
Bepec спасибо за советы


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: Bepec от Декабрь 16, 2012, 12:11
Да что вы, ничего превосходного я не насоветовал. Так, обычные тяготы :)


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: panAlexey от Декабрь 16, 2012, 17:52
Добрый день уважаемое сообщество.
Есть у меня небольшая тема для обсуждения. Может быть кто с этим сталкивался, но на просторах сети я не нашел примера.
Вот в чем задача создать таблицу, но не простую - столбцы и колонки, а немного усложненную (скрин прилагаю.)
Предлагаю разделить задачу на части, т.е. ты делаешь:
- форма с деревом и таблица элементов - это для ввода новых элементов.
- Форма соответственно для редактирования этих элементов или что там у тебя.
- Отчет, куда все это выводится как на скрине. А в отчете уже группируй и суммируй как тебе вздумается.
П.С. Ты просто смешал сущности и уперся в это кровосмешение.

Сейчас пытаю переделать все, вернутся к одной таблице, и добавлять все заголовки и группы как обычные итемы.
Это ты себе только проблемы создаешь.
ПС2. Опиши задачу абстрактно, не смету ли считаешь?


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Декабрь 16, 2012, 18:37
Цитировать
Предлагаю разделить задачу на части, т.е. ты делаешь:
- форма с деревом и таблица элементов - это для ввода новых элементов.
- Форма соответственно для редактирования этих элементов или что там у тебя.
- Отчет, куда все это выводится как на скрине. А в отчете уже группируй и суммируй как тебе вздумается.
П.С. Ты просто смешал сущности и уперся в это кровосмешение.

Дело в том что все перечисленное должно выполнятся в одной форме, как в экселе.

Цитировать
Это ты себе только проблемы создаешь.
В чем тут проблема? Конечно с моделью было бы легче.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: panAlexey от Декабрь 16, 2012, 18:41
Цитировать
Предлагаю разделить задачу на части, т.е. ты делаешь:
- форма с деревом и таблица элементов - это для ввода новых элементов.
- Форма соответственно для редактирования этих элементов или что там у тебя.
- Отчет, куда все это выводится как на скрине. А в отчете уже группируй и суммируй как тебе вздумается.
П.С. Ты просто смешал сущности и уперся в это кровосмешение.
Дело в том что все перечисленное должно выполнятся в одной форме, как в экселе.
Не перебор? А то бывает.
А что за задача? Что конкретно считаешь? Смету?
ПС. Я бы все равно разделил бы формы ввода и отчетность = это тру путь.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Декабрь 16, 2012, 19:17
Цитировать
ПС. Я бы все равно разделил бы формы ввода и отчетность = это тру путь.
Я бы тоже так сделал. Но как говорится, кто платит, тот и заказывает музыку.
Приложение с кучей форм (причем различных по структуре, некоторые даже по горизонтали расширяются), в которых считается доход, расход и т.д. по различным группам и все вместе.
Вот так.
Предложение сделать универсальную модель -это конечно кое что, но затратно по времени.
Поэтому делаю в лоб. В ручную добавляю строки и т.д.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: panAlexey от Декабрь 16, 2012, 20:32
Приложение с кучей форм (причем различных по структуре, некоторые даже по горизонтали расширяются), в которых считается доход, расход и т.д. по различным группам и все вместе.
Всего-то...
Я такую сложную таблицу делал только один раз помнится - когда небольшая фирма торговала молочными продуктами и поставки были ограниченного объема и надо было тщательно разбросать объем по заявкам и не превысить остаток на складе.
40 или 50 покупателей - на каждого покупателя по 4 колонки, сверху итоги, по строкам продукты с остатками и количеством заявочное кол-во и кол-во к отгрузке. При окончательной обработке создавались кипа документов в 1С.
По слухам потом мою обработку предприимчивый прог загнал 5-6 подобным фирмам за нехилтон сумму денюг :)
Извратов конечно в этом мире дофига, но есть и нужные извраты :)


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Декабрь 16, 2012, 21:46
Вот вот, что то вроде того. Только вот нет сопряжения с 1с. Но там своего замута хватает. Еще кучу графиков строить по различным данным.
Надо было самому загнать куче фирм за кучу денег :)


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: panAlexey от Декабрь 16, 2012, 23:32
Вот вот, что то вроде того. Только вот нет сопряжения с 1с. Но там своего замута хватает. Еще кучу графиков строить по различным данным.
Надо было самому загнать куче фирм за кучу денег :)
Я её в самой 1С рисовал.
На Qt геморойнее будет. раза в 5-6. У меня там 2100 строк вышло.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Январь 06, 2013, 14:48
Цитировать
Значит нужно создать свою универсальную модель. От которой бушь наследоваться и создавать свои.
А подскажите пример 2 го наследования от абстрактной модели.
Какие функции переопределять в наследнике а какие в наследнике наследника?

Немного разобрался. Не знал где выставить корневую вершину, в прямом наследнике абстрактного класса или в последующих. Все таки решил сделать в прямом и там же описать все необходимые функции. А в наследниках наследника описал функции, которые отличают разные модели, например columnCount() (в моделях разное количество столбцов)

P.S. Решил все таки пойти путем который мне подсказали (создать модель). В своем прежнем решении зашел в тупик полнейший, очень много данных, короче жутко неудобно.
Давно считал, что для большинства случаев лучше использовать MVC.



Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Январь 07, 2013, 20:31
Споткнулся. Как же иерархическую модель засунуть в TableView?
Не могу найти решения, слышал про ProxyModel.
Может кто сталкивался, поделится идеей или кодом, буду признателен.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: Авварон от Январь 07, 2013, 21:31
Зачем теблвью? Это же банальное дерево, только indentation уберите.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Январь 07, 2013, 22:10
А как сделать в treeview сделать чтобы строка-заголовок расползался на все колонки?
Там вроде нет setSpan как в тэблевью.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: Авварон от Январь 07, 2013, 23:11
drawRow переопределить.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Январь 07, 2013, 23:23
а функция   setFirstColumnSpanned, вроде так называется , где то причитал что делает что то подобное.

Да дерево собственно и не нужно просто надо как таблица она выглядела.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: Авварон от Январь 08, 2013, 13:27
а функция   setFirstColumnSpanned, вроде так называется , где то причитал что делает что то подобное.

Да дерево собственно и не нужно просто надо как таблица она выглядела.

Прикольно, не знал про эту функцию:) Да, это то, что вам надо.

Уберите отступ у дерева, запретите сворачивание и получите иерархическую таблицу.


Название: Re: QTableWidget - конструирование сложной таблицы
Отправлено: kolob от Февраль 10, 2013, 21:21
есть у кого нибудь пример такой реализации, если есть скиньте скрин что получилось. А то что то надоело проект переделывать по несколько раз.
Мне необходимо что то вроде(желательно конечно точно) как на скрине в первом посте.