Russian Qt Forum
Июнь 04, 2024, 00:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление выделеных строк из QListView  (Прочитано 4815 раз)
mwnuke
Гость
« : Март 16, 2008, 15:15 »

Как удалить выделенные строки из QListView?
Я придумал вот такой вот костыль:
Код:
	QModelIndexList indexes = ui.listFiles->selectionModel()->selectedIndexes();
while (indexes.count() != 0){
modelFiles->removeRow(indexes.at(0).row());
indexes = ui.listFiles->selectionModel()->selectedIndexes();
}
(modelFiles - это QStringListView)
Есть ли более красивое решение в данной ситуации?
« Последнее редактирование: Март 16, 2008, 17:07 от mwnuke » Записан
ритт
Гость
« Ответ #1 : Март 16, 2008, 22:07 »

ну, хотя бы
Код:
	QModelIndexList indexes = ui.listFiles->selectionModel()->selectedIndexes();
for(int i = indexes.count() - 1; i >= 0; --i)
m_modelFiles->removeRow(indexes.at(i).row());
Записан
EhTemka
Гость
« Ответ #2 : Март 18, 2008, 17:49 »

ну, хотя бы
Код:
	QModelIndexList indexes = ui.listFiles->selectionModel()->selectedIndexes();
for(int i = indexes.count() - 1; i >= 0; --i)
m_modelFiles->removeRow(indexes.at(i).row());

такой способ не безопасен, поскольку лист индексов идет не по возрастанию, а в том порядке в каком их выделяли, и очень запросто можно напороться на уже несуществующий(удаленный) индех.

я делаю так:

Код:
        QList<int> &removedRows;
        QModelIndexList indexes = ui.listFiles->selectionModel()->selectedRows();
for (QList<int>::const_iterator iter = indexes .begin(); iter != indexes .end(); ++iter) {
removedRows.append(iter-row());
}

       qSort(removedRows.begin(), removedRows.end());

for (int i = removedRows.size()-1; i >= 0; --i) {
modelFiles->removeRow(removedRows.at(i));
}
Записан
ритт
Гость
« Ответ #3 : Март 18, 2008, 21:29 »

ЭхТемка, если ты используешь приведённый код, почему он не компилится? )

Код:
	QModelIndexList selectedRows = m_table->selectionModel()->selectedRows();
if(!selectedRows.isEmpty())
{
QList<int> removeRows;
for(QModelIndexList::Iterator it = selectedRows.begin(); it != selectedRows.end(); ++it)
removeRows.append((*it).row());

qStableSort(removeRows.begin(), removeRows.end(), qGreater<int>());

foreach(int row, removeRows)
m_model->removeRow(row);
}

тогда уж вот так будет правильнее Улыбающийся
Записан
Tonal
Гость
« Ответ #4 : Март 18, 2008, 22:37 »

Первый приведёный код был вполне работоспособным и короче альтернатив. :-)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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