Qt: Как обновить QStringList, когда QListView получает новые записи - PullRequest
0 голосов
/ 27 октября 2018

У меня есть QListView _listView, чья модель QStringListModel _model, чья QStringList равна _locations.Вот код:

_locations << "Sarajevo" << "Tesanj" << "Graz";

_model = new QStringListModel(this);
_model->setStringList(_locations);

_listView = new QListView(this);
_listView->setModel(_model);
_listView->setEditTriggers(
      QAbstractItemView::EditTrigger::DoubleClicked |
      QAbstractItemView::EditTrigger::AnyKeyPressed);

и слоты, которые редактируют _listView:

void Dialog_EditLocations::onKey_del()
{
    QModelIndex _index;
    _index = _listView->currentIndex();
    _model->removeRow(_index.row());
}

void Dialog_EditLocations::onClick_add()
{
    if (_edAddLocation->text() == "") return;
    int row = _model->rowCount();
    _model->insertRow(row);
    QModelIndex _index;
    _index = _model->index(row);
    _model->setData(_index, _edAddLocation->text());
    _edAddLocation->clear();    
}

После редактирования списка в виджете представления списка, я хочу сохранить его в файле.Когда я сохраняю _locations, он сохраняет исходный список из первой строки кода, хотя я и добавил новые элементы.

Как заставить код обновлять _locations всякий раз, когда я делаю новую запись в _listView или хотя бы как получить список, который виден в _listView?

1 Ответ

0 голосов
/ 27 октября 2018

Используйте QStringListModel::stringList(), он возвращает все текущие элементы из модели, которую вы видите в виджете listview , включая любые модификации (добавление, удаление строк).

В конце слота onClick_add вы можете добавить:

_locations = _model->stringList();
...