Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Пытон от Февраля 11, 2012, 11:30



Название: QTableView + QSqlTableModel. Узнать индекс/номер текущей строки и удалить её. КА
Отправлено: Пытон от Февраля 11, 2012, 11:30
К?

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

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

Я уже заколебался выискивать по интернетам знания в день по чайной ложке. Может я, конечно, хреновый искатель, но уже хочется уничтожить пару вселенных.  >:( :'(


Название: Re: QTableView + QSqlTableModel. Узнать индекс/номер текущей строки и удалить её. КА
Отправлено: mutineer от Февраля 11, 2012, 12:53
Хреновый ты искатель...
QTableView::selectionModel() а отсюда уже выбирай удобный тебе метод


Название: Re: QTableView + QSqlTableModel. Узнать индекс/номер текущей строки и удалить её. КА
Отправлено: Пытон от Февраля 11, 2012, 16:04
Посредством selectionModel сумел сделать программное выделение диапазона ячеек в таблице-представлении. Узнать текущую строку в таблице-представлении всё равно не смог.


Название: Re: QTableView + QSqlTableModel. Узнать индекс/номер текущей строки и удалить её. КА
Отправлено: andrew.k от Февраля 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


Название: Re: QTableView + QSqlTableModel. Узнать индекс/номер текущей строки и удалить её. КА
Отправлено: Пытон от Февраля 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 за наводку, но всё равно было тяжко.  ;D