Итак, у меня была модель QAbstractList - ContactBookModel
. Элементы модели представлены классом Contact
, который содержит конструктор и поля name
и number
.
Это сработало, но только просмотр, я не мог его редактировать.
Затем я добавил этот метод:
Q_INVOKABLE bool add(const QString& name, const QString& number);
Если вам нужна реализация:
bool ContactBookModel::add(const QString& name, const QString& number)
{
try
{
if(name.isEmpty() || number.isEmpty())
{
return false;
}
beginInsertRows(QModelIndex(), rowCount(), rowCount());
contacts.append(Contact(name, number));
endInsertRows();
return true;
}
catch(std::exception& e)
{
return false;
}
}
Это работает, я вызываю этот метод из QML и передаю 2 строки из TextFields
как параметры.
Но в документации сказано, что мне нужен метод переопределения insertRow()
.
Хорошо, это должно выглядеть следующим образом:
bool ContactBookModel::insertRow(int row, const QModelIndex &parent = QModelIndex())
{
beginInsertRows(parent, row, row+1);
contacts.append(/*what should be here?*/); //contacts is a private field in a ContactBookModel. They have got a QList<Contact> type.
endInsertRows();
}
1) Как вы можете видеть, когда я использовал add, я строю Contact в методе, используя для этого два поля. Как это сделать с insertRow()
? Где взять (построить) Contact
?
2) Как удалить контакт? В документации сказано, что я должен переопределить removeRow()
. Как использовать это в QML?
3) Как редактировать контакт из QML?
Полный код проекта здесь: https://github.com/bogdasar1985/ContactBook