QT使用SQL模型类_关系表格模型-操作数据库以及委托类的使用
作用:一个数据库中创建两个表
rela_model->setRelation(2,QSqlRelation("course","id","name"));//student表的course字段去关联course表的id字段,对应显示name的值
QSqlRelationalTableModel *rela_model = new QSqlRelationalTableModel(this);
执行程序后:
student表的课程代码22,对应course表id 22,对应显示具体的课程名字
#ifndef SQL_CON1_H
#define SQL_CON1_H
#include
#include
#include
static bool createConn()
{
QSqlDatabase db2=QSqlDatabase::addDatabase("QSQLITE");
db2.setDatabaseName("db17_6.db");
if(!db2.open())
{
QMessageBox::critical(0,"create failed","不能创建数据库连接",QMessageBox::Cancel);
return false;
}
QSqlQuery sql_query;
//创建表
sql_query.exec("create table student (id int primary key, name vchar,course int)");
sql_query.exec("insert into student values(1,'长三',22)");
sql_query.exec("insert into student values(2,'长五',25)");
sql_query.exec("insert into student values(3,'长六',26)");
//创建表 course
sql_query.exec("create table course (id int primary key, name vchar, teacher varchar)");
sql_query.exec("insert into course values(22,'语文','李老师')");
sql_query.exec("insert into course values(25,'数学','王')");
sql_query.exec("insert into course values(26,'外语','张')");
return true;
}
#endif // SQL_CON1_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include //委托一个外键提供一个QComboBox部件来显示所有可选的数据
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QSqlRelationalTableModel *rela_model = new QSqlRelationalTableModel(this);
rela_model->setTable("student");
rela_model->setRelation(2,QSqlRelation("course","id","name"));//student表的course字段去关联course表的id字段,对应显示name的值
rela_model->select();
QTableView *tab_view=new QTableView(this);
tab_view->setModel(rela_model);
setCentralWidget(tab_view);//显示控件信息到主窗口
tab_view->setItemDelegate(new QSqlRelationalDelegate(tab_view));
}
MainWindow::~MainWindow()
{
delete ui;
}
另外:
#include //委托一个外键提供一个QComboBox部件来显示所有可选的数据
tab_view->setItemDelegate(new QSqlRelationalDelegate(tab_view));