2009-06-24 70 views
8

像這樣的Qt 4.4建立一個表模型後:問題與與QSqlTableModel - 沒有自動更新

QSqlTableModel *sqlmodel = new QSqlTableModel(); 

    sqlmodel->setTable("Names"); 
    sqlmodel->setEditStrategy(QSqlTableModel::OnFieldChange); 
    sqlmodel->select(); 
    sqlmodel->removeColumn(0); 

    tableView->setModel(sqlmodel); 
    tableView->show(); 

內容顯示正常,但編輯是不可能的,錯誤:

 QSqlQuery::value: not positioned on a valid record 
+0

您是否可以粘貼您正在運行的查詢的代碼? – nmuntz 2009-06-26 12:38:39

+1

沒有查詢。 QSqlQueryModel需要查詢。相反,QSqlTableModel只顯示一個表格(也允許編輯它)。 「 」QSqlTableModel爲顯示單個表提供了一個可編輯的模型...由於模型是可編輯的,因此生成的視圖是可編輯的。「來自「Qt開發的基礎」作者:Johan Thelin – MadH 2009-06-26 13:00:32

回答

12

我可以確認該錯誤的存在與您在Qt 4.5.1中報告它完全相同, here,仍然給出了一個錯誤的例子(即包括呼叫removeColumn的一個例子)。

作爲解決方法,我試着編寫一個連接到beforeUpdate信號的插槽,並檢查將要在數據庫中更新並可能修復的QSqlRecord出了什麼問題,但我可以'不要讓它工作 - 任何對該記錄參數方法的調用都會導致BusError崩潰。

所以我已經放棄了這個想法,轉而採用了正確的方式來做到這一點(能見度應該由視圖決定,而不是模型,對吧?):失去removeColumn並代替它的電話號碼是tableView->setColumnHidden(0, true)。這樣ID就隱藏起來,一切正常。

所以我認爲我們可以確認有一個文檔錯誤,並在Qt跟蹤器中打開一個關於它的問題,所以它可以在下一輪文檔中修復,對嗎?

0

看來,這樣做的原因是行

sqlmodel->removeColumn(0); 

評論出來後,一切工作perfec TLY。 因此,我將不得不尋找另一種方式不顯示ID在該表;-)

編輯 我說:「這似乎」,是因爲從約翰「Qt開發的基礎」的例子Thelin還刪除了第一列。所以,如果別人也嘗試這種方式並報告結果,那將會很好。

0

我在PyQt中使用Qt 4.6.1,問題仍然存在。刪除「removeColumn(0)」解決了這個問題。