QT, Архитектура: Анатомия "списка друзей" - PullRequest
0 голосов
/ 19 марта 2011

В течение нескольких дней я боролся с QT, моделями, представлениями, делегатами.Я хотел бы знать, что архитектурно, я на правильном пути.Если вы можете это прокомментировать, то приветствуем.

ЦЕЛЬ:

Список друзей с прокруткой, похожий на тот, что есть в Skype.Должны поддерживаться следующие требования:

  1. полный контроль над рисованием строки.Как правило, значки переменной ширины основаны на состоянии объекта, представленного строкой.

  2. Переменная высота для строк, как правило, более подробное отображение строки для выбранной строки.

  3. Добавлены элементы управления для выбранных строк (кнопки действий).
  4. Полный контроль над сортировкой списка
  5. обычно различные типы строк, собеседник или текстовый заполнитель с меткой, указывающей тип друзей прямо под ним (например, «автономные контакты»,"онлайн-контакты").

Мои мысли были следующими:

  1. Использование QListView для элемента управления списком. Используйте производную модель QAbstractList для хранения данных друзей.Он будет иметь массив std :: vector с коллекцией «MyContactClass».Каждый экземпляр «MyContactClass» будет представлять собеседника со связанными с ним полями данных
  2. Использовать производный класс QAbstractItemDelegate для обработки рисования и sizeHinting строк
  3. Подключить модель и делегировать QListView
  4. заполнить модель ...
  5. Заполнить QListView

Я понимаю, что здесь есть много деталей, и это совсем не тривиально. you я хотел бы спросить: являются ли пункты с 1 по 6 правильными с точки зрения архитектуры, учитывая то, что я пытаюсь сделать.

1 Ответ

1 голос
/ 19 марта 2011

Я много занимался программированием моделей / представлений в Qt. Ваш метод мне кажется правильным.

Возможно, вам сложно добавить эти кнопки действий в делегат. QAbstractItemDelegate не очень хорошо работает с пользовательскими виджетами, но хорошо работает с элементами управления опциями стиля.

И, конечно, вам нужно зарегистрировать свой MyContactsClass в MOC, чтобы его можно было использовать в QVariant.

Кроме того, выглядит хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...