Всем Здравствовать !
Есть такая модель
class fpTableModel : public QSqlTableModel
{
public:
fpTableModel(QObject * parent = 0, QSqlDatabase db = QSqlDatabase());
~fpTableModel();
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
void setTable ( const QString & tableName );
int columnCount(const QModelIndex &parent = QModelIndex()) const;
void setDefFields(QStringList & df);
private:
bool inList;
int colsInList, colsInForm;
QStringList DefFields;
};
fpTableModel::fpTableModel(QObject * parent, QSqlDatabase db)
: QSqlTableModel(parent, db)
{
inList = true;
colsInList = colsInForm = 0;
}
fpTableModel::~fpTableModel()
{
}
int fpTableModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
if (inList) return(colsInList);
else return(colsInForm);
}
void fpTableModel::setTable ( const QString & tableName )
{
QSqlTableModel::setTable ( tableName );
setEditStrategy(QSqlTableModel::OnManualSubmit);
select();
colsInList = colsInForm = QSqlTableModel::columnCount();
}
void fpTableModel::setDefFields(QStringList &df)
{
DefFields = df;
colsInList = df.count();
}
QVariant fpTableModel::data(const QModelIndex &index, int role) const
{
if (role != Qt::DisplayRole) return QVariant();
if (!index.isValid()) return QVariant();
QSqlRecord rec;
QVariant valr;
QVariant value = QSqlTableModel::data(index, role);
if (inList && index.column() < colsInList)
{
QString aStr = QString("fld_%1").arg(DefFields.at(index.column()));
rec = record(index.row());
int ridx = record().indexOf(aStr);
valr = rec.value(ridx);
QModelIndex idx = index.sibling(index.row(), ridx);
value = QSqlTableModel::data(idx, role);
return value;
}
return value;
}
В таблице 20 полей. В списке нужно показать 3, (например 2 3 5) а в форме все 20.
За это отвечает ф-я columnCount(const QModelIndex &parent)
Т.е. colsInForm = 20, colsInList = 3 (установлено в setDefFields(QStringList &df) ).
По-идее в QSqlRecord должны быть все 20, но в ф-ции data(const QModelIndex &index, int role),
если index.column() > colsInList в QModelIndex idx = index.sibling(index.row(), ridx) возвращается
невалидный индекс.
Пробовал вытащить данные через record(), тоже облом. В модели и вне её removeColumn(хх)
нигде не вызывалась, а данные из колонок вытащить не могу. Помогите плз, кто в курсе ...
Заранее благодарен за помощь.
Сообщение отредактировал JohnZ - 14.10.2014, 11:26