Qt4 Model / View - Преобразование данных в View? - PullRequest
1 голос
/ 31 августа 2010

Вот мой вариант использования (очень упрощенный).

У меня есть некоторые данные из БД в QSQLTableModel, и мне нужно преобразовать их: объединить несколько полей в одно (и отобразить как таковой) или разбить одно поле на несколько. Как и где это должно быть сделано в Model / View?

Примечания:

Я пытался использовать AbstractProxyModel, чтобы сделать это, но я думаю, это подходит только для фильтрациисортировка.Я мог бы выделить новые данные и вернуть QModelIndex (который содержит указатель на данные), но какой объект должен освободить данные позже?

Изменение объекта View также не помогло бы, потому что он обрабатывает каждую ячейку таблицы отдельно.

Имейте в виду, что я никак не могу изменить базу данных.Как это сделать в Qt?Я уже потратил на это целых два дня, чтобы врезаться в одну стену за другой.

1 Ответ

2 голосов
/ 02 сентября 2010

Использование QAbstractProxyModel не является неправильным подходом, его можно использовать для сопоставления любой модели источника с целью реструктуризации данных.Но это будет много работы, вам придется заново реализовать несколько методов, в том числе columnCount, data, flags, index и другие.По сути, вы должны убедиться, что индексы этой модели соответствуют корректным данным исходной модели.Кроме того, если у вас есть динамическая модель, вам нужно обрабатывать сигналы, поступающие из исходной модели, изменять значения и переизлучать их.Если вы хотите, чтобы представление также редактировало данные, вам придется повторно реализовать setData и т. Д.

Например, если у вас есть столбец, к которому добавлены два значения, и вы хотитечтобы отобразить их в двух отдельных столбцах, columnCount должен вернуть один дополнительный, data должен извлечь исходные данные и вернуть только одну часть на основе столбца в индексе, index должен быть изменен для проверки новых границэта модель и т. д.

Если вам нужна более конкретная помощь по этому вопросу, пожалуйста, опубликуйте пример кода.

...