Russian Qt Forum

Программирование => С/C++ => Тема начата: Alexorleon от Август 09, 2013, 09:13



Название: [РЕШЕНО] Удаление строки в QListView
Отправлено: Alexorleon от Август 09, 2013, 09:13
Здравствуйте люди добрые, помогите в проблемке разобраться. QListWidget НЕТ предлагать, нужен именно QListView.

В конструкторе создаю QListView и QSqlQueryModel. QSqlQueryModel заполняю данными из БД, тут все хорошо, проверено.
Потом в QListView помещаю модель QSqlQueryModel, все хорошо, в QListView выводится 5-ый столбец.

Код:
listView = new QListView;
    connect(listView,SIGNAL(clicked(QModelIndex)),this,SLOT(slot_selectItems(QModelIndex)));

    itemModel = new QSqlQueryModel;
    itemModel->setQuery("SELECT * FROM reports_settings "
                        "WHERE rstitle = '"+groupName+" - "+nameList+
                        "' ORDER BY reports_settings.id");
    listView->setModel(itemModel);
    listView->setModelColumn(5);
    listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
   
Затем мне нужно удалить ОДНУ выбранную строку. Как это сделать?
Пробовал делать так(знаю, это на несколько выделенных, но по идее все же должно работать), увы реакции нет. В itemModel количество строк осталось неизменным.

Код:
QModelIndexList selected = listView->selectionModel()->selectedIndexes();
            for (int i = 0; i < selected.size(); ++i) itemModel->removeRows(selected.at(i).row(), 1);

Находил кучу подобных решений, но так и не получается. Подскажите кто знает или сталкивался.


Название: Re: Удаление строки в QListView
Отправлено: Bepec от Август 09, 2013, 09:24
QSqlQueryModel - не редактируемая модель. У меня как вариант используются две модели. Одна sqlQuery отображаемая и одна простая SqlTableModel.


Название: Re: Удаление строки в QListView
Отправлено: Alexorleon от Август 12, 2013, 12:55
QSqlQueryModel - не редактируемая модель. У меня как вариант используются две модели. Одна sqlQuery отображаемая и одна простая SqlTableModel.

Спасибо Верес.
Использовать QSqlTableModel я не стал, подумал будут осложнения.
В итоге сделал так. Здесь все в куче.

Заполнил QStringList нужными данными. Присвоил его в QStringListModel. Установил эту модель. А там уже удаление из модели и из списка.

Код:
for(int i = 0; i < itemModel->rowCount(); i++){
     QModelIndex index = itemModel->index(i,5);
     optionsName.append(index.data(Qt::DisplayRole).toString());
}
 
list = new QStringListModel(optionsName);
listView->setModel(list);
 
int currentIndex = listView->currentIndex().row();
// удаляем из виджета
list->removeRow(currentIndex);
// удаляем из списка для проверки клонов
optionsName.removeAt(currentIndex);