C++ 如何在QT QSqlRelationalTableModel中与mysql表建立关系?

C++ 如何在QT QSqlRelationalTableModel中与mysql表建立关系?,c++,mysql,sql,qt,C++,Mysql,Sql,Qt,我正在尝试使用QT的QSqlRelationalTableModel。我是MySQL表关系的新手,但我仍然尝试过,无法使它在QT中正常工作 我可以从MySQL中得到结果: create table stu(idd int auto_increment primary key,stu_name varchar(60),stu_age int); create table stuInfo(idd int auto_increment primary key,stu_city varch

我正在尝试使用QT的
QSqlRelationalTableModel
。我是MySQL表关系的新手,但我仍然尝试过,无法使它在QT中正常工作

我可以从MySQL中得到结果:

 create table stu(idd int auto_increment primary key,stu_name varchar(60),stu_age  int);

 create table stuInfo(idd int auto_increment primary key,stu_city    varchar(60),stu_sub varchar(100), foreign key(id) references stu(id));

 select stu.stu_name,stuInfo.stu_city from stu inner join stuInfo on stu.id=stuInfo.id;
要从MySQL检索数据,请执行以下操作:

select stu.stu_name,stuInfo.stu_city from stu inner join stuInfo on stu.id=stuInfo.id;
在QT中,我无法使它工作。我对
setRelation()
QSqlRelation()
感到困惑。我并不完全理解如何在QT中执行相同的查询,我尝试了各种方式,但有时我会得到空白数据、丑陋的标题、错误等

这是我的学习代码:

 model = new QSqlRelationalTableModel();
 model->setTable("stu");

 model->setRelation(0,QSqlRelation("stu","id","stu_name","stu_age"));
 model->setRelation(0,QSqlRelation("stuInfo","id","stu_city","stu_sub"));
 model->select();
 ui->tableView->setModel(model);

QSqlRelation
将一个字段的值替换为关系中另一个字段的值,被替换的字段将不再出现在查询中,因此不能将两个关系分配给同一列,也不能将关系分配给主键(如中所述)

基本上,应该使用
QSqlRelationalTableModel
的结构将是一个主表,该主表将有一个或多个外部索引字段,并且这些字段中的每个字段都可以替换为外部索引来源的表中所选字段的值(例如:替换“city_id”)主表中的数字字段,其中城市名称来自另一个表,该表的“city_id”是主键)


对于要执行的操作,应该使用手动构造的查询来使用
QSqlQueryModel
,而不是
QSqlRelationalTableModel

问题在于,您的代码并不能真正表达您描述的模型

您有一个名为stuInfo的主表,它引用另一个名为stu的表。 要在Qt中执行此操作,您应该基于“stuInfo”(而不是“stu”!)创建一个表:

然后,您可以将外键实现为一个关系:

    model->setRelation(3,QSqlRelation("stu","id","stu_name"));
您需要指向stuInfo表上的索引“3”,它是引用字段“id”的位置(0将指向主键,这不是您想要的!)。QsqlRelation的参数是引用表名(“stu”)、主字段名(“id”)和要指向的引用表字段:在本例中,我指的是“stu_name”;如果我想指出年龄,我可以这样做:

    model->setRelation(3,QSqlRelation("stu","id","stu_age"));
在此代码之后:

    model->select();
    ui->tableView->setModel(model);

您应该有一个视图,显示stuInfo上的所有字段,其最后一个字段(“id”)映射到“stu”表上的名称(或年龄)

我被写了更多关于我的问题的细节,但是stackoverflow给了我太多的错误需要修正。所以我也把它贴在了pastebin上:。谢谢你帮助我!
    model->select();
    ui->tableView->setModel(model);