C++ QSqlField name()方法返回"&引用;

C++ QSqlField name()方法返回"&引用;,c++,sql,qt,C++,Sql,Qt,我有一个类(ServicesTableModel),它继承自QSqlRelationalTableModel。在构造函数中,我有: ServicesTableModel::ServicesTableModel( QWidget* parent, QSqlDatabase db ) : QSqlRelationalTableModel( parent, db ) { setTable( "servicios" ); select(); ... } 现在,如果我把线 qD

我有一个类(
ServicesTableModel
),它继承自
QSqlRelationalTableModel
。在构造函数中,我有:

ServicesTableModel::ServicesTableModel( QWidget* parent, QSqlDatabase db )
: QSqlRelationalTableModel( parent, db )
{ 
    setTable( "servicios" );
    select();
    ...
}
现在,如果我把线

qDebug() << primaryKey();
这很有道理,但之后

qDebug() << primaryKey().name();
这很重要,因为我正试图为与表中的行密切相关的对象泛化类,而且似乎不必向构造函数提供主键名称是很自然的

我肯定是做错了什么,或者我不明白
QSqlField
中的
name()\ucode>方法的作用。

primaryKey.name()
返回索引的名称

在SQL中,可以命名索引,这与用于键的字段的名称无关

索引可以用于多个字段。
可以使用
key检索每个字段名。fieldName(i)
,使用
0QSqlField有一个name()方法,但是primaryKey()返回一个QSqlIndex对象,我调用的是它的name()方法。这就是为什么我没有得到答案。在setTable(tableName)之后,QSqlTableModel可以获得它的主键,但是要获得它的名称(好的,字段的名称,这是我需要的,所以我可以只向类的构造函数提供一个索引号),如果它是一个单字段键,则必须调用primaryKey().fieldName(0)。所以我只需要多付一点钱,休息一下再看文件。我知道。这对我来说应该是一个教训。我希望我没有浪费任何人的时间。在回答中回答你自己的问题是完全可以的,这样其他人就可以投票了。你应该小心使用QSqlRelationalTableModel。似乎在设置关系后,
name()
将从
关系表
返回字段名称,而不是从原始表返回字段名称。
qDebug() << primaryKey().name();
CREATE TABLE servicios (ser_id integer primary key, ... )