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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QTableWidget vs QTableView (холиварчик)  (Прочитано 23788 раз)
Majestio
Гость
« : Август 04, 2013, 20:11 »

Всегда пользовал QTableView ...

Но часто вижу что народ работает с QTableWidget.
Выскажитесь плс, какие методы/способы использования QTableWidget могут существенно сократить время программинга, размер кода в сравнении с QTableView?  Непонимающий
Записан
Bepec
Гость
« Ответ #1 : Август 04, 2013, 20:13 »

Создание модели, реализация драг енд дропа, реализация стороннего взаимодействия.

Лишний класс с базовым функционалом - зачем? Показает язык
Записан
Majestio
Гость
« Ответ #2 : Август 04, 2013, 20:19 »

Лишний класс с базовым функционалом - зачем? Показает язык
Вот и я о том же, как еще говорят - и доступ к данным ячеек у QTableWidget через Ж  Смеющийся
Записан
Bepec
Гость
« Ответ #3 : Август 04, 2013, 21:21 »

Я это говорил про QTableView + модель (две сущности) Показает язык
Против QTableWidget (одна сущность) Улыбающийся

Записан
Majestio
Гость
« Ответ #4 : Август 04, 2013, 21:50 »

Я это говорил про QTableView + модель (две сущности) Показает язык
Против QTableWidget (одна сущность) Улыбающийся

Погоди, а что для QTableWidget служит источником данных?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Август 04, 2013, 21:52 »

Тоже модель, но она "встроенная" Улыбающийся
Записан

kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Август 04, 2013, 22:13 »

по идее *Widget потребляет больше памяти, чем *View, особенно разница будет заметна на больших объемах данных
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #7 : Август 04, 2013, 22:44 »

Вот пошли комментарии по делу Улыбающийся

Да, памяти она сожрёт больше, ибо она многофункциональнее Улыбающийся А на малых объемах *Widget быстрее и проще. Как говорится если ты уверен, что количество элементов ограничено  и будет меньше пары сотен, можно смело использовать *Widget
Записан
Majestio
Гость
« Ответ #8 : Август 04, 2013, 23:15 »

Тоже модель, но она "встроенная" Улыбающийся

Т.е. все, что "встроено" сущностью не считается?  Смеющийся

Вопрос намба ту ... для себя я принял за правило хорошего тона - делать модель не "хранилищем", а "средством доступа к данным". Иными словами:

- умеет читать данные из источника
- умеет распределять ресурсы
- умеет кешировать
- умеет сортировать (для последующего чтения)
- умеет фильтровать (для последующего чтения)
- умеет отдавать запрошенное в результате

... все это делает что-то другое (другой класс или набор процедур) ... А модель должна только уметь получать и обработав, предоставлять. Есть один минус этого подхода - изменение данных и последующую запись в БД через модель я не делаю (вместо этого записываю непосредственно и обновляю). Но минусом я это не считаю, ибо подход прошел полевые испытания и очень таки успешно. Транзакции и блокировки при многопользовательском доступе реализуются вполне приемлемо по объему кодирования и понятности. Практически "копи-паста". Критикуйте!  Смеющийся

Вопрос намбе сри ... Каков функционал встроенной модели? Встроенная модель может, к примеру, отдавать данные из трех принципиально разных источников, предварительно их скомбинировав? Например, из БД, датчика оборотов системного кулера, текущих параметров NDIS?
Записан
Bepec
Гость
« Ответ #9 : Август 05, 2013, 09:51 »

1) Не считается. Она скрыта от меня Подмигивающий И у меня в файле отсутствует класс модели как таковой.

2) Что критиковать? Это свободный выбор. Пусть я не имею пока знаний по кеширования /фильтровке и прочему - это ваш выбор и ваш путь. Аналогично использованию QThread - кто-то наследуется, кто-то moveToThread туда свои классы.

3) Вы не путайте базовый функционал и специфический. Базовый - представить таблицу. Он им обладает. Все действия с таблицей реализованы.
Специфический - заполнение и изменение данных лежит на вас и ... Та дааам - да, вы можете читать данные из трёх источников и менять их в таблице.

PS не пытайте ровнять лопату и мотокультиватор.
Лопатой при должном умении можно сделать всё.
Мотокультиватор же делает специфические вещи лучше и быстрее лопаты, но только их Подмигивающий
Записан
Akon
Гость
« Ответ #10 : Август 05, 2013, 13:48 »

*Widget классы это Item-based technics, которая была единственной в Qt3, если не ошибаюсь. Потом сделали Model-View как более фундаментальную и функциональную фичу, а Item-based натянули поверх (типо для тех, кто "привык").

Majestio +1.

В более/менее функциональных прогах:
Data
Business Logic (C++ classes, ORM)
QAbstractItemModel-наследник: манипуляция данными через Business Logic
View для представления
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Август 05, 2013, 14:55 »

по идее *Widget потребляет больше памяти, чем *View, особенно разница будет заметна на больших объемах данных
Всё зависит от используемой модели.
Если использовать *View и QStandardItemModel, то, имхо, разница будет минимальной.
Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #12 : Август 05, 2013, 17:10 »

Widget это view со стандартной моделью и с максимально расширенным функционалом. Кто не верит - прошу в ассистент.

Комментарий Akon уходит в небытие - это не пережиток Qt3, а удобное и быстрое решение для простых решений.

to GreatSnake - разница будет. Там много функционала. А своя моделька голая.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Август 05, 2013, 17:17 »

Widget это view со стандартной моделью и с максимально расширенным функционалом. Кто не верит - прошу в ассистент.
Что имеется в виду под "стандартной моделью"?
Если QStandardItemModel, то утверждение неверное, ибо
для QListWidget используется приватная QListModel,
для QTreeWidget используется приватная QTreeModel,
для QTableWidget используется приватная QTableModel

Цитировать
to GreatSnake - разница будет. Там много функционала. А своя моделька голая.
чего-то не понял про какую разницу идёт речь Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #14 : Август 05, 2013, 18:10 »

Сужу по Qt 4.7.2 и документации на 5.1

QListWidget и прочие Widget являют собой список Q*WidgetItems. Т.е. каждый элемент представляется отдельно. Отдельно для каждого выделяется место под роли/текст/данные/шрифт/ прочие атрибуты, которые возможно пригодятся (именно это я имею в виду как широкий функционал).

Т.е. QListWidget/QTableWidget/QTreeWidget являют собой просто совокупности QListWidgetItem/QTableWidgetItem/QTreeWidgetItem. Занимаемое место растёт линейно количеству элементов и их атрибутов.

Свой же View и модель дают совокупность данных и единые атрибуты для всех элементов (метод data). При желании оно может конечно разбухнуть, но врят-ли до таких размеров, как *Widget.

Сейчас Widget пример докачает миллион элементов в память и я выложу реальные цифры. А пока жду Улыбающийся


Update: Предупреждение, картинка на 500 кб.
Обе программы содержат миллион строк "tratata". Разница только в Widget/View и процессе заполнения.
Разница в 3 раза по памяти. 

PS это не плохо. Это нормально. На малых объемах данных мне лично удобнее использовать Widget не продумывая модель и роли. К тому же такое поведение можно менять в любой момент и в любом месте ^.^
« Последнее редактирование: Август 05, 2013, 18:35 от Bepec » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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