Russian Qt Forum
Ноябрь 23, 2024, 08:49
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
QTableModel и реляшки :)
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QTableModel и реляшки :) (Прочитано 3933 раз)
ритт
Гость
QTableModel и реляшки :)
«
:
Июнь 18, 2008, 03:48 »
хочу посоветоваться...
стоит задача: тэйблмодель заполняется исходными данными (Qt::EditRole) из какого-то источника структурированных записей (ну, для упрощения, например, из лог-файла), где значения определённых столбцов закодированы и должны преобразовываться в какие-то более читабельные для пользователя данные (Qt::DisplayRole) (подобие реляционной таблмодели, но всё более сложно, чем заложено в кутёвом функционале)
причём, нет смысла декодирование индексов в читабельный вид кодить в наследнике таблмодели, т.к.:
1. структура записей динамична и может изменяться от версии к версии;
2. кроме простой перекодировки ид=>имя предполагается как минимум пол-дюжины перекодировок других видов (ну, чисто для примера - таймстамп=>датавремя;строка_на_аглицком=>строка_на_русском и т.п.).
до сих пор самой умной мыслью, что посетила меня по поводу, было реализовать наследника таблмодели (аналог реляционной таблмодели с той разницей, что исходные данные поступают в Qt::EditRole, а не Qt::DisplayRole, как в QSqlRelationalTableModel + аналог QSqlRelation с виртуальными гетером и сетером значения строки N, что позволит переопределять обработчик для Qt::DisplayRole)
возможно, у кого-то есть идеи или кто-то заинтересован в подобной модели - буду признателен за любые комментарии (конструктивного содержания)
зы. то, что получится в результате, планирую выложить в "компонентах"
«
Последнее редактирование: Июнь 18, 2008, 03:51 от Константин
»
Записан
Zmeishe
Гость
Re: QTableModel и реляшки :)
«
Ответ #1 :
Июнь 18, 2008, 11:02 »
Я в своём наследнике класса модели вместо виртуальных функций геттеров и сеттеров сделал сигналы
void onGetData(QField *fld, QVariant & value, int nRole) const;
void onSetData(QField *fld, QVariant & value, int nRole) const;
QField *fld можно заменить на const QModelIndex & index
оформил эту модель в библиотеку, ессно.
в функции модели QVariant data(...) присваиваю значение value и перед return высылаю сигнал onGetData. Заинтересованная программа его ловит, анализирует и подменяет value, в случае необходимости.
Точно также и с сигналом onSetData.
В зависимости от роли, программа может подменить вообще всё, что угодно (цвет, шрифт, иконку в ячейке, ...), невзирая на предложения модели и не наследуясь от неё.
«
Последнее редактирование: Июнь 18, 2008, 11:11 от Zmeishe
»
Записан
ритт
Гость
Re: QTableModel и реляшки :)
«
Ответ #2 :
Сентябрь 16, 2008, 15:38 »
перепробовал разные варианты - и сигналы, как у Змеище, и наследник модели, как в первом посте - получается одно только низкопроизводительное неудобное гомнецо...основная причина - оба варианта конечны - если требуется отнаследоваться от такой модели, приходится копипастить код data/setData
таким вот эмпирическим путём установил, что самые удобные (в плане использования и последующего наследования) варианты:
* если модифицировать данные нужно только для отображения, наследуемся от айтемделегата и перегружаем displayText/initStyleOption;
* если модифицировать данные нужно и для отображения, и для сортировки/фильтрации/использования_из_модели_"как есть", наследуемся от проксимодели и перегружаем data/setData таким образом, чтобы для определённых ролей на выходе data получалась готовая к работе строка;
+ оба эти варианта потенциально производительнее первых двух
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...