Russian Qt Forum

Qt => Базы данных => Тема начата: ieroglif от Май 06, 2011, 08:39



Название: получить данные, переопределив QSqlTableModel::data()
Отправлено: ieroglif от Май 06, 2011, 08:39
пишу свой класс для работы с БД.
одна и та же таблица в различных местах программы представляется по разному, поэтому решил написать своего наследника от QSqlTableModel, что бы он автоматом выдавал различное количество колонок в разных QTableView в зависимости от своего state (сам прописал, сам устанавливаю)
переопределил методы columnCount, headerData - всё работает нормально.
переписываю метод data и столкнулся с траблой: не могу вытащить реальные данные.
код return QSqlTableModel::data(index,role); (поведение по умолчанию) срабатывает отлично, а вот вытащить что угодно - не получается  :( пытаюсь воспользоваться QSqlTableModel::record(index.row()); , но постоянно получаю пустые QVariant внутри QSqlRecord::value(QString); - данных нету. это баг Qt? или это баг моего мозга? гугл показывает второе - много примеров на просторах интернета пользуются спокойно QSqlRecord для получения данных изнутри класса.


Название: Re: получить данные, переопределив QSqlTableModel::data()
Отправлено: ieroglif от Май 06, 2011, 12:09
уточню тему:
в базе данных есть два поля: текстовое и числовое. в таблице мне их надо выводить в одной ячейке в виде "текстчисло" к тому же число ещё и раскрашивать разными цветами =)
для отображения такого элемента хочу поставить делегатом отображения QLabel и передавать туда html, формируемый моделью из двух полей базы.
пишу свою модель, наследник от QSqlTableModel - и получаю косяк по получению оригинала данных.
может я вообще изобретаю какой-то велосипед, который в Qt уже давно сделан? =)
ткните тогда =)


Название: Re: получить данные, переопределив QSqlTableModel::data()
Отправлено: ieroglif от Май 06, 2011, 13:02
вариант решения найден:
я наследую свой model класс от QProxyModel
плюсы:
1. разделение классов работы с бд, и классов, отображающих данные (GIU и CORE классы)
2. возможность внутри класса работать к объектом sql-модели как методами "проксируемая модель", так и "таблица sql"