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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите удалить запись из модели  (Прочитано 4982 раз)
sector
Гость
« : Ноябрь 21, 2006, 10:25 »

Здрасьте всем! Проблема заключается в том что есть QSqlTableModel, select() отрабатывает и выводит в TableView, потом нужно отработать ниже указанный код, т.е. просто удалить в модели запись НО ОНА НЕ УДАЛЯЕТСЯ, она отмечается (!) и что удивитель присутствует в модели... Заранее благодарен за помощь.
Код:

void EditRashodNaklad::remTovar()
{
if(QMessageBox::warning(this, QObject::tr("Внимание удаление данных!"), QObject::tr("Вы действительно хотите удалить товар?"), QObject::tr("Удалить"), QObject::tr("Отменить")) == 0)
{
QModelIndex indexRemTovar = selectRashodNakladModel->currentIndex();
if(rashodNakladModel->removeRow(indexRemTovar.row()))
{
//rashodNakladModel->select();
updateSumm(); // не удаляет!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
}
}
[/code]
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Ноябрь 21, 2006, 19:45 »

TableView отображает результаты select() для QSqlTableModel. Зачем удалять строку в отображении если в модели она остается. Надо удалить запись в базе, а затем выполнить select() для QSqlTableModel и в TableView смотри результат.

Читать документацию очень полезно.
Записан
sector
Гость
« Ответ #2 : Ноябрь 22, 2006, 15:32 »

Да действительно читать документацию полезно)))))
Все делов том что надо удалять запись в модели.... чтобы если чнго можно было сделать revertAll();
Вообщемто я уже разобрался но механизм мне не очень нравиться - надо руками отлавливать статус в vertikalHeader потом вводить флаговое поле в базе и ставить там отметку что типа запись не должна учитываться и скрывать ее в tableView (((
Может у кого лучше предложения...
Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #3 : Ноябрь 22, 2006, 16:47 »

Цитата: "sector"
Да действительно читать документацию полезно)))))
Все делов том что надо удалять запись в модели.... чтобы если чнго можно было сделать revertAll();
Вообщемто я уже разобрался но механизм мне не очень нравиться - надо руками отлавливать статус в vertikalHeader потом вводить флаговое поле в базе и ставить там отметку что типа запись не должна учитываться и скрывать ее в tableView (((
Может у кого лучше предложения...


К сожалению Qt не jav Грустный
Записан
Karl-Philipp
Гость
« Ответ #4 : Ноябрь 26, 2009, 17:13 »

в классе, унаследованном от QTreeView, удаляю данные из модели (QSqlTableModel *model) таким образом:

Код
C++ (Qt)
   int rowToDelete;
   QModelIndex removeIndex;
 
   removeIndex = currentIndex();
   rowToDelete = removeIndex.row() == -1 ? 0 : removeIndex.row();
   model->removeRows(rowToDelete, 1);
   model->select();
   removeIndex = model->index(rowToDelete, 0);
   setCurrentIndex(removeIndex);
данные не удаляются, вместо этого в консоль выводится:
Цитировать
QSqlQuery::value: not positioned on a valid record

p.s. при создании модели задана стратегия QSqlTableModel::OnFieldChange
Что я делаю не так?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Ноябрь 26, 2009, 17:19 »

Может пригодится:
Код
C++ (Qt)
// Щелкнули по представлению
void TableEditor::SlotClick()
{
btn_del->setEnabled(true);
}
 
// Изменили строку
void TableEditor::SlotChange()
{
// Теперь применить и отмена активны
btn_apply->setEnabled(true);
btn_revert->setEnabled(true);
}
 
// Удаляем строку
void TableEditor::SlotDel()
{
 int row;
 QItemSelectionModel *selectModel;
 QModelIndexList indexes;
 QModelIndex index;
 
// Узнаем выделенную строку
selectModel = view->selectionModel();
indexes = selectModel->selectedIndexes();
 
foreach(index, indexes)
{
QString str;
row = index.row();
if (!model->removeRows(row,1))
{
str = model->lastError().text();
qDebug() << str << "\n\r";
break;
}
else
{
view->setRowHidden(row, true);
}
}
SlotChange();
SlotClick();
 
}
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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