MVC в Qt vs Gtk + - PullRequest
       17

MVC в Qt vs Gtk +

3 голосов
/ 11 мая 2010

Я программист на Qt C ++ с некоторым интересом к Gtk +.Интересно, как Gtk + реализовал Model-View-Controller.В Qt они все испортили, и сами признали это.Я могу попытаться объяснить недостатки в Qt, и для тех, кто знает Gtk +, возможно, вы сможете ответить, есть ли у Gtk + те же или более серьезные проблемы:

Доступ к любому узлу, скажем, в модели дерева, основан на QModelIndex.Таким образом, каждый узел имеет своего рода уникальный идентификатор.Это создает много осложнений.Вы должны создать специальные методы для создания индекса и для создания индекса родительского объекта QModelIndex.Это может быть довольно сложным.Трудно сказать, создать два объекта модели и присоединить один из них в качестве узла в другой модели.Объекты QModelIndex, возвращаемые из одной модели, несовместимы с другой.

Я думаю, что Какао сделал гораздо более простую модель с NSOutlineView и NSOutlineViewDataSource.Подход Qt является более гибким, но за счет того, что его слишком сложно использовать и получить право.В Какао вы не используете индексный объект, а вместо этого спрашиваете, что является потомком объекта X по индексу Y. И тогда вы можете спросить о значении для данного столбца таблицы Z и объекта X.

Qt делаетне иметь конкретного простого в использовании способа аннулирования узла в дереве, чтобы сделать его перезагрузкой.С Cocoa вы можете вызвать reloadItem, чтобы создать конкретный объект в дереве, и, по желанию, его потомки будут перезагружены из Model.

Это часть моей оценки того, насколько подходит Gtk +.Я не пытаюсь объявить здесь своего рода победителя; -)

1 Ответ

3 голосов
/ 19 мая 2010

Предполагая, что вы в основном говорите о деревьях (GTK + использует модель-представление-контроллер и для других типов данных, особенно для текста), интерфейс называется GtkTreeModel .

Используется GtkTreeIter в качестве низкоуровневого «указателя» на модель.

Не думаю, что вы можете добавить одну модель как дочернюю для другой, в GTK +.

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

...