Russian Qt Forum

Qt => Базы данных => Тема начата: rv от Январь 22, 2007, 20:01



Название: Как позиционировать QSqlRelationalTableModel/View ?
Отправлено: rv от Январь 22, 2007, 20:01
Стандартное использование Model/View в части SQL:
Определены QSqlRelationalTableModel с запросом QSqlQuery, всё отображается в QTableView.

Мне нужно спозиционировать список выборки на строку с определённым ключом (id одной из использованных таблиц).

Как я понимаю, позиционирование можно осуществить следующими путями:
1. Саму таблицу:
Код:

 QTableViewselectRow( row )

2. Спозиционировать, используя QSelectionModel:
Код:

model              = self.ui.tableView.model();
selectionModel  = self.ui.tableView.selectionModel();
topLeft             = model.index( row, 0, QModelIndex());
selection          = QItemSelection(topLeft, topLeft);
selectionModel.select(selection, QItemSelectionModel::Select);


Варианты 1 и 2 работают, но буссмысленны в моём случае, потому что я не знаю номера строки.

3. (Не работает). Попытался спозиционировать через QTableView.model().query():
Код:

        model = self.ui.tableView.model()
        query = model.query()
        query.seek(row)

- ничего осязаемого не происходит.

Не будучи спецом по БД, я всё же подразумеваю, что нужно использовать вторичную выборку или же как-то похоже на вариант 3), т.е. двигать курсор выборки.

Как это сделать правильно? (Варианты вроде сделать ещё одно окно и там выводить только интересующую запись не устраивают, потому что пользователю требуется чтобы таблица была постоянно спозиционирована (центрирована) на интересующую его запись)

[/code]


Название: Как позиционировать QSqlRelationalTableModel/View ?
Отправлено: nova от Январь 22, 2007, 20:57
Цитировать

Мне нужно спозиционировать список выборки на строку с определённым ключом (id одной из использованных таблиц).

В каком смысле - одной из  использованных таблиц :?:
Ты получаеш ОДНУ таблицу !!!

можеш попробовать так:
Код:

  QItemSelectionModel *selectionModel = paymentsView->selectionModel();
  selectionModel->clearSelection();
  paymentsView->scrollToTop();
  QModelIndexList list=orderModel->match(orderModel->index(0, 0),0,acc);
  if(!list.isEmpty())
  {
    selectionModel->setCurrentIndex (list.first(),QItemSelectionModel::Rows|
                                    QItemSelectionModel::Select|QItemSelectionModel::ClearAndSelect);
    paymentsView->scrollTo(orderModel->index(list.first().row(), 1));
  }


Название: Спасибо, этот способ работает, хотя я ожидал SQL-оператора
Отправлено: rv от Январь 24, 2007, 19:30
выборки из выборки или позиционирования курсора выборки.
Насколько я понял, позиционирование QSqlQuery не влияет на model/view


Название: Re: Спасибо, этот способ работает, хотя я ожидал SQL-операто
Отправлено: nova от Январь 24, 2007, 20:31
Цитата: "rv"
выборки из выборки или позиционирования курсора выборки.
:shock: :?:  :lol:
Цитата: "rv"

Насколько я понял, позиционирование QSqlQuery не влияет на model/view

нет не влияет