2012-04-22 24 views
16

我有一個繼承自QSqlRelationalTableModel的類(ServicesTableModel)。在構造函數中,我有:QSqlField name()方法返回「」

ServicesTableModel::ServicesTableModel(QWidget* parent, QSqlDatabase db) 
: QSqlRelationalTableModel(parent, db) 
{ 
    setTable("servicios"); 
    select(); 
    ... 
} 

現在,如果我把行

qDebug() << primaryKey(); 

,其中點是我得到

QSqlRecord(1) 
" 0:" QSqlField("ser_id", int, required: no, generated: yes) 

這是非常合情合理的,但經過

qDebug() << primaryKey().name(); 

答案是

「」

所以我不能達到主鍵的名稱。

表是源碼,與

CREATE TABLE servicios (ser_id integer primary key, ...) 

這很重要,因爲我想概括爲密切相關的表中的行對象的類中定義,似乎天生不具備提供主鍵名稱給構造函數。

我一定會做錯什麼,或者我不明白QSqlFieldname()_方法是做什麼的。

+3

QSqlField具有_name()_方法,但_primaryKey()_返回一個QSqlIndex對象,這是它的_name()_方法我打電話。這就是爲什麼我沒有得到答案。 之後_setTable(tableName)_ QSqlTableModel獲取其主鍵好吧,但爲了得到它的名字(以及字段的名稱,這是我所需要的,所以我可以提供一個索引號給我的類的構造函數),如果它是一個字段鍵,則必須調用_primaryKey()。fieldName(0)_。 所以我只需付出更多的注意力,並在休息一下後閱讀文檔。 我知道。這對我來說應該是一個教訓。 我希望我失去了沒有人的時間。 – Queequeg 2012-04-22 14:22:28

+1

在答案中回答自己的問題完全可以,因此其他人可以放棄。 – 2012-06-20 20:45:18

+0

你應該小心QSqlRelationalTableModel。看起來,在設置關係之後,name()將從「關係表」中返回字段的名稱,而不是從原始表中返回。 – Funt 2013-09-25 07:05:42

回答

1

primaryKey.name()返回索引的名稱。

在SQL中,索引可以被命名,並且這與用於該鍵的字段的名稱無關。

索引可以在多個字段上工作。 每個字段名稱可以與key.fieldName(i)被檢索,與0<i<key.count()