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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление выделенных строк в QTableView  (Прочитано 16134 раз)
lokoArt
Гость
« : Февраль 16, 2010, 11:06 »

Добрый день. Подскажите пожалуйста. У меня есть QTableView а модель QSqlQueryModel. Я хочу чтобы при нажатии на кнопочку удалялись выделенные строки. Я нашёл такой метод selectedIndexes. НО он возваращает список, причём каждый элемент это отдельынй индекс. А как лучше сделать? Может быть работать с QItemModelSelected? Или в классе-наследнике от QTableView переписать selectedIndexes?
« Последнее редактирование: Февраль 16, 2010, 12:02 от lokoArt » Записан
Павел_F.
Гость
« Ответ #1 : Февраль 16, 2010, 11:12 »

Назвали бы тему "QTableView, как удалить выделенные строки", а то назвеание темы ничего общего с вопросом не имеет. Не хорошо.
Код
C++ (Qt)
QTableView *table;
int count = table->selectionModel()->selectedRows().count();
for( int i = 0; i < count; i++)
table->model()->removeRow( table->selectionModel()->selectedRows().at( i).row(), QModelIndex());

Примерно так у меня удаляются выделенные строки.
« Последнее редактирование: Февраль 16, 2010, 11:16 от Павел_F. » Записан
lokoArt
Гость
« Ответ #2 : Февраль 16, 2010, 11:21 »

Назвали бы тему "QTableView, как удалить выделенные строки", а то назвеание темы ничего общего с вопросом не имеет. Не хорошо.
Код
C++ (Qt)
QTableView *table;
int count = table->selectionModel()->selectedRows().count();
for( int i = 0; i < count; i++)
table->model()->removeRow( table->selectionModel()->selectedRows().at( i).row(), QModelIndex());

Примерно так у меня удаляются выделенные строки.

мда... спасибо большое... Не думал, что всё так просто....
Записан
asvil
Гость
« Ответ #3 : Февраль 16, 2010, 12:58 »

QModelIndexList indexes = selectionModel()->selectedRows();

   if (!indexes.count())
      return;

   if (QMessageBox::question(this, tr("Removing data"), tr("Data will be removed permanently. Continue?"),
                         QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No)
      return;

   int removed = 0;
   int count = 1;
   int start = indexes[0].row();

   for (int i = 1; i < indexes.count(); ++i) {
      if (indexes.at(i - 1).row() != indexes.at(i).row() - 1) {
         d->model->removeRows(start - removed, count);
         removed += count;
         start = indexes.at(i).row();
         count = 1;
      } else {
         ++count;
      }
   }

   d->model->removeRows(start - removed, count);
Записан
lokoArt
Гость
« Ответ #4 : Февраль 16, 2010, 14:19 »

Назвали бы тему "QTableView, как удалить выделенные строки", а то назвеание темы ничего общего с вопросом не имеет. Не хорошо.
Код
C++ (Qt)
QTableView *table;
int count = table->selectionModel()->selectedRows().count();
for( int i = 0; i < count; i++)
table->model()->removeRow( table->selectionModel()->selectedRows().at( i).row(), QModelIndex());

Примерно так у меня удаляются выделенные строки.

ну пример почему-то ваш у меня не заработал(((
Записан
Павел_F.
Гость
« Ответ #5 : Февраль 16, 2010, 14:27 »

У меня не SQLная модель, функция removeRow моя, переопределенная. Я привел пример как получить номера выделенных строк и как сказать модели что их нужно удалить. А вот конкретную реализацию удаления i-й строки из модели уже писать вам.
Записан
lokoArt
Гость
« Ответ #6 : Февраль 16, 2010, 15:00 »

вы предлагаете мне создать класса унаследованный от QSqlQueryModel?
Записан
Павел_F.
Гость
« Ответ #7 : Февраль 16, 2010, 15:40 »

Ну, думаю, да. Я наследовался от QAbstractTableModel.
Записан
lokoArt
Гость
« Ответ #8 : Февраль 18, 2010, 08:07 »

Ну, думаю, да. Я наследовался от QAbstractTableModel.
Спасибо, всё сделал и заработало. А почему ты наследовался от QAbstractItemModel? А не сразу от QSqlQueryModel>
Записан
Павел_F.
Гость
« Ответ #9 : Февраль 18, 2010, 08:27 »

Я от QAbstractTablemodel наследовался потому что, как я уже говорил, у меня не SQLная модель. К базам данных никакого отношения не имеет. Модель делал для хранения, отображения и редактирования большого кол-ва однотипных настроек для железа. Потом в железо это пишется в двоичном виде. Железо отвечает тоже двоичным видом. Прикручивать базу смысла нет никакого.
Записан
lokoArt
Гость
« Ответ #10 : Февраль 18, 2010, 08:31 »

Я от QAbstractTablemodel наследовался потому что, как я уже говорил, у меня не SQLная модель. К базам данных никакого отношения не имеет. Модель делал для хранения, отображения и редактирования большого кол-ва однотипных настроек для железа. Потом в железо это пишется в двоичном виде. Железо отвечает тоже двоичным видом. Прикручивать базу смысла нет никакого.
ну спасибо большое...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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