crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QSqlTableModel + proxy, 1 модель на 2 формы с разным кол-м колонок
JohnZ
  опции профиля:
сообщение 14.10.2014, 11:24
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Всем Здравствовать !

Есть такая модель
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); // Test

    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);     // Test

    QModelIndex idx = index.sibling(index.row(), ridx);

    value = QSqlTableModel::data(idx, role);

//        value = record().value(QString("fld_%1").arg(DefFields.at(index.column())));
//        value = record(index.row()).value(aStr);
        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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 17:04