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, ...)
這很重要,因爲我想概括爲密切相關的表中的行對象的類中定義,似乎天生不具備提供主鍵名稱給構造函數。
我一定會做錯什麼,或者我不明白QSqlField
的name()_
方法是做什麼的。
QSqlField具有_name()_方法,但_primaryKey()_返回一個QSqlIndex對象,這是它的_name()_方法我打電話。這就是爲什麼我沒有得到答案。 之後_setTable(tableName)_ QSqlTableModel獲取其主鍵好吧,但爲了得到它的名字(以及字段的名稱,這是我所需要的,所以我可以提供一個索引號給我的類的構造函數),如果它是一個字段鍵,則必須調用_primaryKey()。fieldName(0)_。 所以我只需付出更多的注意力,並在休息一下後閱讀文檔。 我知道。這對我來說應該是一個教訓。 我希望我失去了沒有人的時間。 – Queequeg 2012-04-22 14:22:28
在答案中回答自己的問題完全可以,因此其他人可以放棄。 – 2012-06-20 20:45:18
你應該小心QSqlRelationalTableModel。看起來,在設置關係之後,name()將從「關係表」中返回字段的名稱,而不是從原始表中返回。 – Funt 2013-09-25 07:05:42