class CustomQueryModel : public QSqlQueryModel{ Q_OBJECT... private: conts int parseColumn; //номер столбца, в который надо разобрать QBitArray *bitArray; //массив признаков (наличие "ключа")...};
...void CustomQueryModel::setQuery(const QSqlQuery & query){ QSqlQueryModel::setQuery(query); //выбираем все данные, а то хз как их потом разобрать while (myModel->canFetchMore()) myModel->fetchMore(); parseData(); //<=в этом методе идет разбор данных}void CustomQueryModel::setQuery(const QString & query, const QSqlDatabase & db/* = QSqlDatabase()*/){ CustomQueryModel::setQuery(QSqlQuery(query, db));}void CustomQueryModel::parseData(){ int count = rowCount(); QString strData; //строка данных //переинициализируем массив признаков delete bitArray; bitArray = new QBitArray(count, false); for (int i = 0; i < count; ++i) { strData = QSqlQueryModel::index(i, parseColumn).data().toString(); //далее идет проверка на наличие "ключа" и запись признака... }}QVariant CustomQueryModel::data(const QModelIndex &index, int role) const{ QVariant value = QSqlQueryModel::data(index, role); //если "наш" столюец и роль= Qt::TextColorRole, то подкрашиваем текст if (index.column() == parseColumn && role == ) { if (bitArray->testBit(index.row())) { return qVariantFromValue(QColor(Qt::green)); } else { return qVariantFromValue(QColor(Qt::red)); } } return value;}...