Как получить выбранные элементы из QListView, который использует пользовательский QAbstractListModel в C ++ - PullRequest
0 голосов
/ 27 марта 2020

Я создал собственную модель списка, следуя этому руководству Создание модели cusotm для QListView . Я могу показать список пользовательских объектов (например, «Сотрудник», как в примере), но я не знаю, как восстановить выбранные объекты (могу ли я получить «связанные» объекты напрямую?).

Может быть, мне нужно что-то сделать с этой командой:

myLV->selectionModel()->selectedIndexes();

Но я не знаю, как вернуть исходные пользовательские объекты.

[ПРАВИТЬ]

До сих пор я решил вернуть объект, добавив собственный метод в мою модель списка:

Employee* MyEmployeeListModel::getAtSelectedIndex(const QModelIndex& index){
    return employees_.at(index.row());
}

И затем вызвав это в главном окне:

QModelIndexList selectedRows;
QItemSelectionModel * selmodel = ui->employeesLV->selectionModel();
selectedRows = selmodel->selectedRows();

MyEmployeeListModel* currModel = dynamic_cast <MyEmployeeListModel*>(ui->employeesLV->model());

for (const QModelIndex & index : selectedRows){
    Employee* item=currModel->getAtSelectedIndex(index);
    if (item) {
        // do something with the item
    }
}

Теперь я хочу знать, действительно ли это лучшая практика или нет.

1 Ответ

0 голосов
/ 27 марта 2020

Я использую следующий код с QTreeView (ui-> treeMessages), но это должно работать и с QListView:

            QModelIndexList selectedRows;
            QItemSelectionModel * selmodel = ui->treeMessages->selectionModel();
            selectedRows = selmodel->selectedRows();

            for (const QModelIndex & index : selectedRows)
            {
                const QModelIndex sourceIndex = m_sortFilterModel->mapToSource(index);
                ItemData * item = sourceIndex.internalPointer();
                if (item) { 
                    // do something
                }

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...