Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ QSqlRelationalTableModel и QTableView

Автор: sdg 24.4.2011, 14:54

Есть база данных на несколько таблиц.
С ними я работаю через QTableView, через модель QSqlRelationalTableModel. В качестве ItemDelegate я использую QSqlRelationDelegate. Благодаря этому получаю комбобокс прямо в таблице на форме, в котором я могу выбирать все значения, доступные в этом поле (а они определяются из другой таблицы с помощью FOREIGN KEY автоматически этим delegate'ом).
Есть следующая проблема, при попытке получить данные выделенной строки в QTableView, я получаю все данные из ячеек, кроме тех в которых установленo setRelation ( вместо данных пустые значнения).
Как получить эти данные из связных таблиц?

Автор: sdg 24.4.2011, 21:28

void MainWindow::init(){
    connection=Connection::getInstance();
    ui->tableView->viewport()->installEventFilter(this);
    model = new QSqlRelationalTableModel(0,connection->getDB());
    model->setHeaderData(0, Qt::Horizontal, tr("id"));
    model->setHeaderData(1, Qt::Horizontal, tr("name"));
    model->setHeaderData(2, Qt::Horizontal, trUtf8("assort"));
    model->setTable("table1");
    model->setRelation(2, QSqlRelation("tasrt", "id", "name_as"));
    model->select();

    ui->tableView->setModel(model);
    ui->tableView->setColumnHidden(0,true);
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->tableView->setItemDelegate(QSqlRelationalDelegate(ui->tableView));
    ui->tableView->resizeColumnsToContents();
    ui->tableView->resizeRowsToContents();
    ui->tableView->show();

}

void MainWindow::saveSettings(){
QItemSelectionModel *selectionModel = ui->tableView->selectionModel();
QModelIndexList indexes = selectionModel->selectedRows();
QModelIndex index;
foreach (index, indexes) {
  QSqlRecord record = model->record(index.row());
  QString settings_file;
  settings_file.append(record.value("name").toString()).append("\n");
  settings_file.append(record.value("name_as").toString()).append("\n");


qDebug()<<settings_file;
}

}


удалось получить индекс из связной таблицы, как получить значение по этому индексу?

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)