Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: mwnuke от Март 16, 2008, 15:15



Название: Удаление выделеных строк из QListView
Отправлено: 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)
Есть ли более красивое решение в данной ситуации?


Название: Re: Удаление выделеных строк из QListView
Отправлено: ритт от Март 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());


Название: Re: Удаление выделеных строк из QListView
Отправлено: EhTemka от Март 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));
}


Название: Re: Удаление выделеных строк из QListView
Отправлено: ритт от Март 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);
}

тогда уж вот так будет правильнее :)


Название: Re: Удаление выделеных строк из QListView
Отправлено: Tonal от Март 18, 2008, 22:37
Первый приведёный код был вполне работоспособным и короче альтернатив. :-)