我的目標是爲數據庫創建一個胖客戶端。基本上全部是關於管理三個數據列表。Qt厚數據庫客戶端體系結構
我想將我的應用程序分成不同的層,所以使用Qt的Model/View框架對我來說似乎很自然。
- 什麼時候應該創建QSql *模型實例?
我需要能夠連接/斷開/從數據庫多次(我有菜單項)。我不滿意刪除一堆模型,並在每次連接/斷開連接時再次創建它們。
有沒有其他的方法?
- 我應該在哪裏創建QSql *模型實例?
我不認爲主窗口或任何其他GUI相關的類應該持這樣的代碼:
m_goodsModel->setRelation(1, QSqlRelation("Level", "LevelId", "Name"));
我想解耦從數據結構的GUI。任何想法如何做到這一點?
- 何時何地應將視圖與模型綁定?
我需要用十幾種方式來表示我的三個列表。如果我每次連接/斷開連接都重新創建模型,我需要再次將新創建的模型注入到所有視圖中。
如果我只能做到一次,那將會很棒,但我不知道該怎麼做。
- 怎麼辦與討厭
QSqlTableModel::select()
方法?
這個讓我發瘋。與其他模型(例如QStringListModel
,QFileSystemModel
等)相比,數據即可立即使用,QSqlTableModel
派生的模型在您手動調用它們的select()
方法之前是無用的。在該調用之前,該模型是空的,以及使用該模型的視圖;標題數據也沒有被填充,所以視圖甚至不知道它必須呈現哪些列。
因爲我不能避免select()
調用我不知道我應該把它放在哪裏,以便它很好?我不認爲MainWindow或任何其他GUI相關的類應該包含該代碼。
- 性能和健壯性
我不開心重新初始化後重新連接數據庫一切。這需要很長時間(我的意思是執行期間)。我還希望避免模型娛樂過程中的崩潰,因爲視圖可能仍然會引用它們。
難道還沒有其他的方法來設置所有的東西只是一次,並妥善處理重新連接?
這基本上是我在做什麼。但是這種方法沒有解決模型注入和娛樂問題。 每次連接後我需要創建新模型還是可以重複使用舊模型?如果我被迫重新創建它們,那麼誰(即什麼類/層)負責模型注入? – 2010-08-19 23:26:09
您必須重新創建模型 - 在連接關閉後它們變爲無效(請參閱http://doc.qt.nokia.com/4.6/qsqldatabase.html#removeDatabase)。 注入模型的圖層是知道視圖的圖層。可能是連接插槽中的主窗口。 – IgKh 2010-08-20 09:54:36
事實上,我不''刪除()'QSqlDatabase,我只是'關閉()'它。這很重要嗎? – 2010-08-20 20:33:47