重点:
1.QSqlRelationalTableModel可以关联多个数据表。
以studInfo作为QTableView的模型,其中departID和majorId存储的是编码,因为使用QSqlRelationalTableModel模型,就可以将dedpartments表中对应departID编码的名称和majors表中对应的majorId编码的名称显示出来。
2.利用setRelation的方法,关联两个对应的表格。
tabModel=new QSqlRelationalTableModel(this,DB);
tabModel->setTable("studInfo"); //设置数据表
tabModel->setEditStrategy(QSqlTableModel::OnManualSubmit); //编辑策略
tabModel->setSort(tabModel->fieldIndex("studID"),Qt::AscendingOrder);
selModel=new QItemSelectionModel(tabModel,this); //创建选择模型
connect(selModel,&QItemSelectionModel::currentChanged,this, &MainWindow::do_currentChanged);
// connect(selModel,SIGNAL(currentChanged(QModelIndex,QModelIndex)),
// this,SLOT(do_currentChanged(QModelIndex,QModelIndex)));
ui->tableView->setModel(tabModel);
ui->tableView->setSelectionModel(selModel);
tabModel->setHeaderData(tabModel->fieldIndex("studID"), Qt::Horizontal, "学号");
tabModel->setHeaderData(tabModel->fieldIndex("name"), Qt::Horizontal, "姓名");
tabModel->setHeaderData(tabModel->fieldIndex("gender"), Qt::Horizontal, "性别");
tabModel->setHeaderData(tabModel->fieldIndex("departID"),Qt::Horizontal, "学院");
tabModel->setHeaderData(tabModel->fieldIndex("majorID"), Qt::Horizontal, "专业");
//设置代码字段的关系
tabModel->setRelation(tabModel->fieldIndex("departID"),
QSqlRelation("departments","departID","department")); //学院
tabModel->setRelation(tabModel->fieldIndex("majorID"),
QSqlRelation("majors","majorID","major")); //专业
ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView)); //为关系型字段设置默认代理组件
效果如图所示: