У меня есть определенная структура, определенная в C ++, которая содержит несколько переменных, среди которых есть переменная QList. Теперь я могу динамически добавлять новую структуру в Qml listview, но мой вопрос таков: я также хочу добавить новый элемент в QList внутри структуры, я могу сделать это в фоновом режиме, но не могу обновить viewview.
Я думаю, что ошибка появляется в функции connect () в C ++. Как я понимаю, для добавления новой строки необходимо вызвать beginInsertRows () и endInsertRows (), но должны ли отправитель и получатель быть одинаковыми в этих двух сценариях?
Итак, у меня есть следующая структура в C ++ вместе с некоторыми сигналами и функциями, используемыми для вставки новых строк.
"todolist.h":
struct ToDoItem
{
bool done;
QString description;
QList<int> list;
ToDoItem(){
done = false;
description = "text";
QList<int> mylist;
mylist.append(1);
list = mylist;
}
};
signals:
void preItemAppended();
void postItemAppended();
void preListAppended();
void postListAppended();
public slots:
void appendItem();
void appendList();
void ToDoList::appendItem()
{
emit preItemAppended();
mItems.append(ToDoItem());
emit postItemAppended();
}
void ToDoList::appendList()
{
emit preListAppended();
mItems[0].list.append(1);
emit postListAppended();
}
"todomodel.h"
void ToDoModel::setList(ToDoList *list)
{
beginResetModel();
if (mList)
mList->disconnect(this);
mList = list;
if (mList) {
connect(mList, &ToDoList::preItemAppended, this, [=]() {
const int index = mList->items().size();
beginInsertRows(QModelIndex(), index, index);
});
connect(mList, &ToDoList::postItemAppended, this, [=]() {
endInsertRows();
});
connect(mList, &ToDoList::preListAppended, this, [=]() {
const int index = mList->lists().size();
beginInsertRows(QModelIndex(), index, index);
});
connect(mList, &ToDoList::postListAppended, this, [=]() {
endInsertRows();
});
}
endResetModel();
}
Хорошо работают первые две функции соединения, которые используются для вставки нового элемента, но вторые две функции соединения не работают.