crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Работа с QListView
esaj
  опции профиля:
сообщение 28.4.2012, 8:02
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 28.4.2012
Пользователь №: 3347

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть два QListView
Надо реализовать перемещение из одного в другую с помощью множественного выбора.
Проблема с удалением строк в первом QListView после множественного выбора. Как решить проблему? как правильно удалить данные из QListView (есть индексы выбранных строк, как найти что удалить? т.к. после первого удаления, индексы смещаются..)

список с индексами остается, а смещается индексы QListView в котором удалил строку
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Snake174
  опции профиля:
сообщение 28.4.2012, 8:14
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 18.4.2011
Из: Миасс
Пользователь №: 2613

Спасибо сказали: 9 раз(а)




Репутация:   0  


Удалять нужно с конца списка. С QListWidget'ом я делал так:
Раскрывающийся текст

//================================================================================
//! Перемещение элементов из одного списка в другой
//================================================================================
void FieldSettings::listMove( int id )
{
  QList<QListWidgetItem *> itemList1 = list1->selectedItems();
  QList<QListWidgetItem *> itemList2 = list2->selectedItems();

  switch (id)
  {
    // вправо
    case 0:
      for (register int i = 0; i < itemList1.count(); ++i)
      {
        list1->setCurrentItem( itemList1.at(i) );

        QListWidgetItem *it0 = new QListWidgetItem( list2 );
        it0->setText( itemList1.at(i)->data( Qt::DisplayRole ).toString() );
        it0->setData( Qt::UserRole, itemList1.at(i)->data( Qt::UserRole ).toInt() );

        QListWidgetItem *it = list1->takeItem( list1->currentRow() );
        list1->removeItemWidget( it );
      }

      list2->sortItems();

      break;

    // влево
    case 1:
      for (register int i = 0; i < itemList2.count(); ++i)
      {
        list2->setCurrentItem( itemList2.at(i) );

        QListWidgetItem *it0 = new QListWidgetItem( list1 );
        it0->setText( itemList2.at(i)->data( Qt::DisplayRole ).toString() );
        it0->setData( Qt::UserRole, itemList2.at(i)->data( Qt::UserRole ).toInt() );

        QListWidgetItem *it = list2->takeItem( list2->currentRow() );
        list2->removeItemWidget( it );
      }

      list1->sortItems();

      break;

    // вправо все
    case 2:
      for (register int i = list1->count() - 1; i >= 0; --i)
      {
        list1->setCurrentItem( list1->item(i) );

        QListWidgetItem *it0 = new QListWidgetItem( list2 );
        it0->setText( list1->item(i)->data( Qt::DisplayRole ).toString() );
        it0->setData( Qt::UserRole, list1->item(i)->data( Qt::UserRole ).toInt() );

        QListWidgetItem *it = list1->takeItem( list1->currentRow() );
        list1->removeItemWidget( it );
      }

      list2->sortItems();

      break;

    // влево все
    case 3:
      for (register int i = list2->count() - 1; i >= 0; --i)
      {
        list2->setCurrentItem( list2->item(i) );

        QListWidgetItem *it0 = new QListWidgetItem( list1 );
        it0->setText( list2->item(i)->data( Qt::DisplayRole ).toString() );
        it0->setData( Qt::UserRole, list2->item(i)->data( Qt::UserRole ).toInt() );

        QListWidgetItem *it = list2->takeItem( list2->currentRow() );
        list2->removeItemWidget( it );
      }

      list1->sortItems();

      break;
  }
}
//================================================================================



Сообщение отредактировал Snake174 - 28.4.2012, 8:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.12.2024, 5:10