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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView + QSqlTableModel. Узнать индекс/номер текущей строки и удалить её. КА  (Прочитано 11882 раз)
Пытон
Гость
« : Февраль 11, 2012, 11:30 »

К?

Имеется табличка в БД sqlite3. В создаваемом мною окне находится QTableView связанный с QSqlTableModel. В модели сидят данные из таблички. Требуется: определить текущую выбранную пользователем строку и удалить её как с экрана, так и из БД. У QSqlTableModel нет никакого currentRow(), у QTableView тоже нет (или я в упор не вижу).

Дык, как определить индекс текущей строки и удалить её? И, если я удаляю строку из QSqlTableModel, эта строка удалится из БД или нет? Или нужно будет мне определить индивидуальный номер из ключевого поля таблицы и затем уж выполнить sql-запрос на удаление?

Я уже заколебался выискивать по интернетам знания в день по чайной ложке. Может я, конечно, хреновый искатель, но уже хочется уничтожить пару вселенных.  Злой Плачущий
Записан
mutineer
Гость
« Ответ #1 : Февраль 11, 2012, 12:53 »

Хреновый ты искатель...
QTableView::selectionModel() а отсюда уже выбирай удобный тебе метод
Записан
Пытон
Гость
« Ответ #2 : Февраль 11, 2012, 16:04 »

Посредством selectionModel сумел сделать программное выделение диапазона ячеек в таблице-представлении. Узнать текущую строку в таблице-представлении всё равно не смог.
Записан
andrew.k
Гость
« Ответ #3 : Февраль 11, 2012, 22:04 »

Посредством selectionModel сумел сделать программное выделение диапазона ячеек в таблице-представлении. Узнать текущую строку в таблице-представлении всё равно не смог.
А как ты ищешь интересно?
http://developer.qt.nokia.com/doc/qt-4.8/qabstractitemview.html#currentIndex
http://developer.qt.nokia.com/doc/qt-4.8/qabstractitemview.html#selectedIndexes
Записан
Пытон
Гость
« Ответ #4 : Февраль 12, 2012, 15:51 »

Методом антинаучного тыка и попадания пальцем в небо таки откопал то, что мне нужно.


Код
Python
myconnection = QtSql.QSqlDataBase.addDatabase("QSQLITE") # создаём подключение
myconnection.setDatabaseName("./mydir/mybase/base.s3db") # указываем базу данных для подключения
myconnection.open() # открываем соединение
 
-----
 
view = QtGui.QTableView() # создаём сетку-грид-таблицу-представление
model = QtSql.QSqlTableModel(myconnection) # создаём для неё модель данных
model.setTable("mytable") # указываем таблицу из БД для модели
model.select() # загружаем данные из таблицы в модель
view.setModel(self.model) # назначаем сетке-гриду-таблице-представлению модель данных
selModel = view.selectionModel() # создаём ссылку на модель-выбора (именно из неё можно получить текущий индекс ячейки) в сетке-гриде-таблице
 
-----
 
row = selModel.currentIndex().row() # Получаем (АЛЛИЛУЙЯ! СЛАВА КПСС! БРАВО-БИС! НО ПАСАРАН!) индекс текущей, выбранной пользователем, строки.
self.model2.removeRows(row, 1) # Удаляем из модели данных строку с этим индексом (второй параметр - кол-во удаляемых строк). Из БД строка тоже удаляется.

Вон он куда, оказывается, заховался этот индекс текущей строки. Оказывается у представления есть не только модель данных, но ещё и модель-выбора, так сказать.

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


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