Qt Model-View данных и модели в отдельном потоке - PullRequest
2 голосов
/ 20 марта 2012

Раньше я спрашивал о запуске модели и вида в разных потоках, и теперь я понимаю, как это создает проблему.Чтобы обойти проблему, я думал о дублировании данных.Когда данные изменяются рабочим потоком, он одновременно отправляет обновление в поток GUI / Model для обновления модели теми же данными (поэтому существует точная копия данных с GUI / моделью).

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

Пожалуйста, предложите!

Ссылка на другой вопрос: Шаблон проектирования, Qt Model / View и несколько потоков

1 Ответ

0 голосов
/ 20 марта 2012

Возможны 2 сценария, но в любом случае вам понадобятся как минимум 2 объекта следующим образом:

Объект данных

Содержит все функции, необходимые для обслуживания и управления данными. Данные хранятся в указателях на объекты, описывающие данные. Структуры данных для этого я оставлю на ваше усмотрение.

Модель

Содержит вектор указателей на данные, которые отображаются в данный момент

Сценарий 1

Данные в QTableView отображаются только в этом случае, при сигнале QTimer или другом сигнале хранение данных блокируется, а вектор для модели дисплея обрезается и помещается в модель и reset() вызывается для перекраски QTableView с новыми данными.

Сценарий 2

Вы можете манипулировать данными с помощью пользовательских ItemEditor в QTableView. В этом случае верхний виджет с QTableView должен иметь ссылки на ваш объект данных и QTableView и обработчик сигнала для сигнала, излучаемого ItemEditor, когда редактирование завершено. Этот обработчик сигнала затем заблокирует структуру данных внутри объекта данных и обновит ее, как только это будет сделано, он может обрезать новый вектор для отображения, но чаще всего не будет.

Как настроить блокировку, поиск и т. Д., Зависит только от вас.

...