LINUX.ORG.RU

История изменений

Исправление equeim, (текущая версия) :

Должно быть примерно так:



class MessagesModel : public QAbstractListModel
{
    Q_OBJECT
public:
    QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
    int rowCount(const QModelIndex& parent = QModelIndex()) const override;

protected:
    QHash<int, QByteArray> roleNames() const override;

    QList<MessagePacket> m_messages;
};

QVariant data(const QModelIndex &index, int role) const
{
    if (!index.isValid()) {
        return;
    }

    if (role == Qt::UserRole) {
        return m_messages[index.row()].name();
    }

    return QVariant();
}

int rowCount(const QModelIndex&) const
{
    return m_messages.size();
}

QHash<int, QByteArray> roleNames() const
{
    return {{Qt::UserRole, "name"}};
}

В QML внутри делегата получаешь значение как modelData.name (или model.name). Если ролей нужно нескольно, то соответственно меняешь data() и roleNames(). Все роли должны начинаться с Qt::UserRole (хотя в данном случае она одна, и можно использовать и стандартную Qt::DisplayRole).

Исправление equeim, :

Должно быть примерно так:



class MessagesModel : public QAbstractListModel
{
    Q_OBJECT
public:
    QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
    int rowCount(const QModelIndex& parent = QModelIndex()) const override;

protected:
    QHash<int, QByteArray> roleNames() const override;

    QList<MessagePacket> m_messages;
};

QVariant data(const QModelIndex &index, int role) const
{
    if (!index.isValid()) {
        return;
    }

    if (role == Qt::UserRole) {
        return m_messages[index.row()].name();
    }

    return QVariant();
}

int rowCount(const QModelIndex&) const
{
    return m_messages.size();
}

QHash<int, QByteArray> roleNames() const
{
    return {{Qt::UserRole, "name"}};
}

В QML внутри делегата получаешь значение как modelData.name (или model.name). Если ролей нужно нескольно, то соответственно меняешь data() и roleNames(). Все роли должны начинаться с Qt::UserRole.

Исходная версия equeim, :

Должно быть примерно так:



class MessagesModel : public QAbstractListModel
{
    Q_OBJECT
public:
    QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
    int rowCount(const QModelIndex& parent = QModelIndex()) const override;

protected:
    QHash<int, QByteArray> roleNames() const override;

    QList<MessagePacket> m_messages;
};

QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
{
    if (!index.isValid()) {
        return;
    }

    if (role == Qt::UserRole) {
        return m_messages[index.row()].name();
    }

    return QVariant();
}

int rowCount(const QModelIndex&) const
{
    return m_messages.size();
}

QHash<int, QByteArray> roleNames() const
{
    return {{Qt::UserRole, "name"}};
}

В QML внутри делегата получаешь значение как modelData.name (или model.name). Если ролей нужно нескольно, то соответственно меняешь data() и roleNames(). Все роли должны начинаться с Qt::UserRole.