Проектирование контакт листа Qt — c++ qt design

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...

Вопрос:


Нужно написать контакт лист для мессенджера. Для этого пытаюсь правильно все спроектировать для удобной работы и простого расширения.

На данный момент имеется несколько моделей сущностей с представлений для них. Назовем их User, Chat, Group (у всех есть общий родитель AbstractModel) и ***View для каждого из них.
Необходимо это красиво рисовать списком пока по некоторым критериям:

  • Только группы
  • Только контакты
  • Переписка (чаты и контакты)

Знаю, что уже на этом этапе все плохо, но проект коммерческий и все переписать я не могу.

Так вот, на данный момент лучшее, что я придумал это сделать модель, унаследованную от QAbstractListModel и содержать в ней все элементы (QVector<AbstractModel>), эту модель привязать к QListView и создать QSortFilterProxyModel, которая как раз будет отвечать за отображение по критериям + сортировка.

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

Самое забавное, что в QListWidget этих проблем в принципе нет, но привязать свои модели к нему нельзя…

Может я где-то не прав? Буду признателен, если укажите

Автор вопроса: sm4ll_3gg

Источник

Вам также может быть интересно:

Шаблон-одиночка и многопоточность в Java — java многопоточность singleton
Вопрос: Существует клиент-серверное приложения, на серверной(мультипотоковой) части я пытаюсь реализовать синглтон: public class Server { private static Server server = new Server(); ...
Delphi REST library обновить Access Token google api — delphi api rest
Вопрос: У меня вопрос по работе с сетью в Delphi С помощью REST library (с которой знаком поверхностно) подключаюсь к Google drive api в OAuth2Authenticator-е успешно получил ...
Как быстро удалить и очистить 500к+ файлов в linux? — linux
Вопрос: Есть интересная задача: Есть папка в котором скопилось 500000 файлов логов. Нужно удалить файлы, которые не используются программой. Нужно очистить файлы, которые используется программой. Я попробовал так: for i ...
Android отключить полноэкранный режим — android полноэкранный
Вопрос: Добрый день! Столкнулись с такой проблемой, приложение работает в полноэкранном режиме, при этом требуется постоянный вертикальный режим. С мобильными приложениями все хорошо, да и с планшетами ...
Проблема с синхронизацией времени на сервере Ubuntu 16.04 — ubuntu ntp
Вопрос: Есть 2 сервера находящихся в 1 часовом поясе. Наблюдается проблема с расхождением времени около 70 секунд. В чем может быть проблема, с чего начать, ...
Избежать большого количество подзапросов SQL — sql sql-server
Вопрос: В WinForms приложении существует dataGridView, который заполняется около 1000 строк и 107 столбцов при входе в приложение из БД MS SQL. Хранимая процедура, большинство данных ...
Добавление элемента в модель — c++ qt
Вопрос: Не могу понять как происходит взаимодействие модели и представления. Нужно добавить элемент в модель и установить для него виджет в отображении. У QListView есть метод ...
Выполнить команду на удалённом Windows-сервере из-под Linux — python linux windows
Вопрос: Есть зоопарк серверов числом более 150. На всех стоят Windows Server 2008, 2012, 2012 R2. Машины не в домене, физически находятся по всей стране ...
Протестировать процедуру в макросе Microsoft Project — vba project-management
Вопрос: Я работаю с Microsoft Project 2013. На мою просьбу написать макрос, «товарищ» ответил мне следующей процедурой: Sub Macro1() n = InputBox("Input Name ...
Поднять блок вверх — css
Вопрос: Здравствуйте! Хочу поднять блок с картинками выше, но когда задаю слишком большой margin-top то второй ряд просто начинает наезжать сверху на первый и съезжается в ...
SQLJ в Java (Intellij idea) — java oracle jdbc
Вопрос: Подскажите, какую библиотеку нужно скачать, или нечто подобное, чтобы работал import oracle.sqlj.runtime.*; Автор вопроса: DenProg Roman C Здесь находится все для БД Oracle. ...
Виджет приложения в сообществе ВКонтакте — vkontakte-api вконтакте
Вопрос: Недавно у ВКонтакте появилась возможность ставить виджеты в группы (https://vk.com/dev/apps_widgets). Я не понял, как сделать свой виджет? Куда нужно вписывать сам код виджета? Есть ли ...
std::string vs std::wstring в русскоязычном приложении — c++ qt
Вопрос: Поскольку в свое время плавно переехал с чистого C на С++/Qt, то все проблемы unicode остались за кадром, скрытые внутри QString. Теперь при переходе ...
Как правильно проверить ЭП в Java? — java криптография валидация
Вопрос: У меня есть 2 файла - файл подписи(PKCS7) и файл, который был этой подписью подписан. Мой вопрос заключается в том, как можно проверить, что ...
Проблема вращения сцены OpenGL — математика opengl матрицы
Вопрос: Мне нужно вращать сцену вокруг X и Y осей. Проблема в том, что я не могу использовать команды gl.glRotatef(deltaX, 0, 1, 0); gl.glRotatef(deltaY, 1, 0, 0); так ...

Оставьте ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *