Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: lokoArt от Февраль 16, 2010, 11:06



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


Название: Re: Получение данных из QTableView
Отправлено: Павел_F. от Февраль 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());

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


Название: Re: Получение данных из QTableView
Отправлено: lokoArt от Февраль 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());

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

мда... спасибо большое... Не думал, что всё так просто....


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


Название: Re: Получение данных из QTableView
Отправлено: lokoArt от Февраль 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());

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

ну пример почему-то ваш у меня не заработал(((


Название: Re: Удаление выделенных строк в QTableView
Отправлено: Павел_F. от Февраль 16, 2010, 14:27
У меня не SQLная модель, функция removeRow моя, переопределенная. Я привел пример как получить номера выделенных строк и как сказать модели что их нужно удалить. А вот конкретную реализацию удаления i-й строки из модели уже писать вам.


Название: Re: Удаление выделенных строк в QTableView
Отправлено: lokoArt от Февраль 16, 2010, 15:00
вы предлагаете мне создать класса унаследованный от QSqlQueryModel?


Название: Re: Удаление выделенных строк в QTableView
Отправлено: Павел_F. от Февраль 16, 2010, 15:40
Ну, думаю, да. Я наследовался от QAbstractTableModel.


Название: Re: Удаление выделенных строк в QTableView
Отправлено: lokoArt от Февраль 18, 2010, 08:07
Ну, думаю, да. Я наследовался от QAbstractTableModel.
Спасибо, всё сделал и заработало. А почему ты наследовался от QAbstractItemModel? А не сразу от QSqlQueryModel>


Название: Re: Удаление выделенных строк в QTableView
Отправлено: Павел_F. от Февраль 18, 2010, 08:27
Я от QAbstractTablemodel наследовался потому что, как я уже говорил, у меня не SQLная модель. К базам данных никакого отношения не имеет. Модель делал для хранения, отображения и редактирования большого кол-ва однотипных настроек для железа. Потом в железо это пишется в двоичном виде. Железо отвечает тоже двоичным видом. Прикручивать базу смысла нет никакого.


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