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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Удаление строки и currentSelection  (Прочитано 10682 раз)
trenkinan
Гость
« : Май 12, 2010, 18:26 »

Столкнулся с такой проблемой: Талица, контекстное меню, в нем есть пункт удалить, в обработчике к нему пишу:
Код
C++ (Qt)
model1->setEditStrategy(QSqlTableModel::OnManualSubmit);
   QModelIndexList currentSelection = ui->mytable->selectionModel()->selectedIndexes();
  // model1->removeRow(currentSelection.count());//так как не то пока удаляет
   qDebug()<<currentSelection;
   qDebug()<<currentSelection.count();
Вот что выдает мне дебаг:
Код:
(QModelIndex(11,1,0x52d8160,QSortFilterProxyModel(0x52d7c68) )  )  
1
В таблице 12 строк, т.е. как я понимаю modelindex работает верно и косячит count(). Причем единица выдается всегда, где бы не щелкнул. Что такое может быть?
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Май 12, 2010, 19:02 »

А я не понял модель собственная?

Я вообще делал удаление так(своя модель):
1) В классе модели есть QList, который представляет собой выводимые данные.
2) В этом QList при выделении нескольких строк во View я помечал нужные индексы какой-нибудь особой строкой QString removeMark="RemItem"; например.
3) А потом просто делал QList::removeAll("RemItem");
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
crossly
Гость
« Ответ #2 : Май 12, 2010, 19:16 »

Код:
foreach(QModelIndex i,view->selectedIndexes())
       model->removeRow(i.row());
Записан
trenkinan
Гость
« Ответ #3 : Май 12, 2010, 19:18 »

Интересное конечно предложение, спасибо. Но я бы хотел сделать по аналогии с SQL Browser-ом. т.е. нечто вроде
Код
C++ (Qt)
model1->removeRow(currentSelection.at(currentSelection.count()).row());
model1->submitAll();
Но пока так не получается, в общем я пока не хочу реализовывать удаление нескольких записей сразу, достаточно будет реализовать удаление одной, выделенной правой мышкой...
Записан
crossly
Гость
« Ответ #4 : Май 12, 2010, 19:21 »

ааа...  ну дык и возьмите код с sqlbrowser.... в чем проблема то??
Записан
trenkinan
Гость
« Ответ #5 : Май 12, 2010, 19:22 »

на
Код
C++ (Qt)
foreach(QModelIndex i,view.selectedIndexes())
говорит
Код:
 error: within this context
Можно пояснить, что здесь что.
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #6 : Май 12, 2010, 19:24 »

Наверное view не доступен тут. Где он объявлен?
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
crossly
Гость
« Ответ #7 : Май 12, 2010, 19:25 »

как объявлен view?? и кстати да ... нужно ....count()-1
Записан
trenkinan
Гость
« Ответ #8 : Май 12, 2010, 19:28 »

Вот по аналогии с примером из браузера:
Код
C++ (Qt)
model1->setEditStrategy(QSqlTableModel::OnRowChange);
   QModelIndexList currentSelection = ui->mytable->selectionModel()->selectedIndexes();
   for (int i = 0; i < currentSelection.count(); ++i) {
       if (currentSelection.at(i).column() != 0)
           continue;
       model1->removeRow(currentSelection.at(i).row());
   }
 
   model1->submitAll();
   model1->setEditStrategy(QSqlTableModel::OnRowChange);
 
 
Сносит сразу по 2 записи и меняет странным образом содержимое таблицы. Созданные в данные момент записи удалять не может
Записан
trenkinan
Гость
« Ответ #9 : Май 12, 2010, 19:29 »

Код
C++ (Qt)
class MainWindow : public QMainWindow
{
   Q_OBJECT
 
public:
QTableView view;
Записан
crossly
Гость
« Ответ #10 : Май 12, 2010, 19:34 »

чет я не пойму
Код:
QTableView view;
а что у вас
Код:
ui->mytable
??
Записан
trenkinan
Гость
« Ответ #11 : Май 12, 2010, 19:51 »

Извиняюсь, моя таблица создавалась в дизайнере, поэтому к не я обращаюсь:
Код
C++ (Qt)
ui->mytable->
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #12 : Май 12, 2010, 19:52 »

ммм..зачем view тогда? ))
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
crossly
Гость
« Ответ #13 : Май 12, 2010, 19:54 »

если вам нужно удалить только одну запись (я так понимаю последнюю из выделения), то
Код:
model1->setEditStrategy(QSqlTableModel::OnManualSubmitChange);
    QModelIndexList currentSelection = ui->mytable->selectionModel()->selectedIndexes();
    model1->removeRow(currentSelection.at(currentSelection.count()-1).row());
    model1->submitAll();
    model1->setEditStrategy(QSqlTableModel::OnRowChange);
Записан
trenkinan
Гость
« Ответ #14 : Май 12, 2010, 19:56 »

Виноват, не использовалась эта view, пересмотрел код, понял почему у меня setAlternateColor не работал, но факт остается, теперь имею такой обработчик меню удалить:
Код
C++ (Qt)
void MainWindow::deleterow_slot()
{
   model1->setEditStrategy(QSqlTableModel::OnRowChange);
   QModelIndexList currentSelection = ui->mytable->selectionModel()->selectedIndexes();
   for (int i = 0; i < currentSelection.count()-1; ++i) {
       if (currentSelection.at(i).column() != 0)
           continue;
       model1->removeRow(currentSelection.at(i).row());
   }
 
   model1->submitAll();
   model1->setEditStrategy(QSqlTableModel::OnRowChange);
 
 
   qDebug()<<currentSelection;
   qDebug()<<currentSelection.count();
}

Свежесозданные в момент работы программы записи удаляет, а вот остальные ни в какую
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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