2016-04-14 43 views
-4

在Qt中有一個類QAbstractTableModel,它是一個抽象類。爲什麼Qt設計人員提供了一個抽象類,並沒有提供可用於建模表的實際類。爲什麼設計師讓我把班級分類來使用它?爲什麼Qt提供一個類來繼承它?

回答

4

這是因爲該類不用於表建模,它是一個模型化表的所有類必須遵守的接口。 Qt有幾個可重用的具體模型,只需查看基類QAbstractItemModeldocumentation中的「Inherited by」列表即可。其中一些派生類是具體的,即那些名稱不以0123'開頭的:) :)

如果你想要一個通用模型,你可以使用一個QStandardItemModel

您需要閱讀C++中的接口。使用抽象虛擬方法實現的接口是一個非常常見的習慣用法。見例如here。在C++ 11中,您可以使用接口don't use the virtual method idiom

如果你問「爲什麼Qt不提供任何實現該接口的通用具體類」,答案是:因爲這是不可能的工作。每個人的數據源都有不同的實現細節,Qt不可能預測每個人的方法並提供一個通用橋樑。

QAbstractTableModel存在允許您在自己的數據模型和Qt的數據模型之間創建適配器。

+0

爲什麼所有建模表的類都應該遵循該接口?有什麼是用於堅持該界面的觀點? – andreahmed

+1

@andreahmed由於沒有接口,不可能編寫通用視圖或代理來顯示/修改數據。 –

1

有通用模型實現,例如QStandardItemModel,因此您可以根據需要將它用於表,樹或列表視圖。

相關問題