Russian Qt Forum
Ноябрь 23, 2024, 11:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Удаление строки в QListView  (Прочитано 4339 раз)
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);

Находил кучу подобных решений, но так и не получается. Подскажите кто знает или сталкивался.
« Последнее редактирование: Август 13, 2013, 11:07 от Alexorleon » Записан
Bepec
Гость
« Ответ #1 : Август 09, 2013, 09:24 »

QSqlQueryModel - не редактируемая модель. У меня как вариант используются две модели. Одна sqlQuery отображаемая и одна простая SqlTableModel.
Записан
Alexorleon
Гость
« Ответ #2 : Август 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);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.148 секунд. Запросов: 21.