История изменений
Исправление
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.