Подклассы QAbstractTableModel - PullRequest
       9

Подклассы QAbstractTableModel

1 голос
/ 19 апреля 2011

Я создал подкласс QAbstractTableModel для представления данных из QMap.В этом QMap есть QLists of QSqlRecords, и эта карта модифицирована другой частью моего кода.Я хочу использовать эту модель с QTableView для отображения записей SQL в этой карте для каждого ключа.Вот мой код.

// mymodel.h

class MyModel : public QAbstractTableModel
{
Q_OBJECT

public:
    MyModel(QObject *parent = 0);
    int rowCount(const QModelIndex &parent = QModelIndex()) const;
    int columnCount(const QModelIndex &parent = QModelIndex()) const;
    QVariant data(const QModelIndex &index, int role) const;
    void setRecordMap(QMap<int, QList<QSqlRecord>> *map);
    void setSelectedSerMsgIndex(QModelIndex *index);

private:
    QMap<int, QList<QSqlRecord>> *recordMap;
    QModelIndex *selectedSerendibMsgIndex;
};

// mymodel.cpp

MyModel::MyModel(QObject *parent) : QAbstractTableModel(parent)
{

}

int MyModel::rowCount(const QModelIndex &parent) const
{
    if(recordMap->isEmpty())
        return 0;

    int row = selectedSerendibMsgIndex->row();
    return recordMap->value(row).size();
}

int MyModel::columnCount(const QModelIndex &parent) const
{
    if(recordMap->isEmpty())
        return 0;

    int row = selectedSerendibMsgIndex->row();
    return recordMap->value(row).at(0).count();
}

QVariant MyModel::data(const QModelIndex &index, int role) const
{
    if(recordMap->isEmpty())
        return QVariant();

    if (!index.isValid())
        return QVariant();

    int row = selectedSerendibMsgIndex->row();
    if (index.row() >= recordMap->value(row).size())
        return QVariant();

    if (role == Qt::DisplayRole) 
    {
        return  recordMap->value(row).value(index.row()).value(index.column()); /* QVariant("hello");*/
    } 
    else 
    {
        return QVariant();
    }
}

void MyModel::setRecordMap(QMap<int, QList<QSqlRecord>> *map)
{
    recordMap = map;
}

void MyModel::setSelectedSerMsgIndex(QModelIndex *index)
{
    selectedSerendibMsgIndex = index;
}

Извините за огромный пост.Но проблема в том, что я не вижу данных с карты.Я предполагаю, что это потому, что что-то не так с моей реализацией метода data ().Но я не могу понять, что это такое.Пожалуйста, будь любезен, чтобы помочь мне.Спасибо.

1 Ответ

1 голос
/ 20 августа 2013

попробуйте изменить это:

void MyModel::setRecordMap(QMap<int, QList<QSqlRecord>> *map)
{
    recordMap = map;
}

к этому:

void MyModel::setRecordMap(QMap<int, QList<QSqlRecord>> *map)
{
    beginResetModel();
    recordMap = map;
    endResetModel();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...