在Qt中有一個類QAbstractTableModel
,它是一個抽象類。爲什麼Qt設計人員提供了一個抽象類,並沒有提供可用於建模表的實際類。爲什麼設計師讓我把班級分類來使用它?爲什麼Qt提供一個類來繼承它?
-4
A
回答
4
這是因爲該類不用於表建模,它是一個模型化表的所有類必須遵守的接口。 Qt有幾個可重用的具體模型,只需查看基類QAbstractItemModel
的documentation中的「Inherited by」列表即可。其中一些派生類是具體的,即那些名稱不以0123'開頭的:) :)
如果你想要一個通用模型,你可以使用一個QStandardItemModel
。
您需要閱讀C++中的接口。使用抽象虛擬方法實現的接口是一個非常常見的習慣用法。見例如here。在C++ 11中,您可以使用接口don't use the virtual method idiom。
如果你問「爲什麼Qt不提供任何實現該接口的通用具體類」,答案是:因爲這是不可能的工作。每個人的數據源都有不同的實現細節,Qt不可能預測每個人的方法並提供一個通用橋樑。
QAbstractTableModel
存在允許您在自己的數據模型和Qt的數據模型之間創建適配器。
1
有通用模型實現,例如QStandardItemModel,因此您可以根據需要將它用於表,樹或列表視圖。
相關問題
- 1. 爲什麼一類從結構繼承
- 2. 我可以繼承一個類來爲泛型提供互操作嗎?
- 3. 爲什麼一個結構允許接口繼承,爲什麼一個類不能繼承
- 4. 爲什麼基類繼承兩次,即使其中一個繼承爲虛擬?
- 5. 發現什麼繼承類它指向
- 6. UML - 類繼承,你繼承了什麼?
- 7. 爲什麼我們使用另一個繼承binder類的類來訪問BoundServices?
- 8. Angular 2 - 從基類繼承提供者
- 9. 爲什麼babel在繼承Object.create(superClass.prototype)時使用setProtoTypeOf來繼承?
- 10. 我如何專門爲一個類的繼承者提供參數類型?
- 11. C#:繼承一個子類,它從父
- 12. 爲什麼嵌套類「繼承」?
- 13. 爲什麼繼承對象類型
- 14. 爲什麼不能繼承SqlDataReader類?
- 15. 如何從Qt類繼承?
- 16. 爲什麼egit提供選項來承擔責任?
- 17. 繼承:爲什麼繼承和提供的變量之間的行爲有所不同?
- 18. UserControl繼承另一個類來擴展它
- 19. 爲什麼Ruby模塊繼承不像類繼承一樣工作?
- 20. 你爲什麼繼承UIView?
- 21. 爲什麼箭頭繼承?
- 22. 我爲什麼要繼承?
- 23. 爲什麼多個類繼承鑽石問題和多接口繼承沒有?
- 24. Qt XML繼承
- 25. 這個Kotlin對象爲什麼從它自身繼承?
- 26. 案例類和繼承:如何提供不同的行爲
- 27. 我們應該爲中間繼承類提供默認實現:
- 28. 爲什麼我更喜歡元類繼承Python中的超類的繼承
- 29. 爲什麼不用只有一個虛擬繼承的鑽石繼承?
- 30. 「繼承」屬性:它有什麼作用?
爲什麼所有建模表的類都應該遵循該接口?有什麼是用於堅持該界面的觀點? – andreahmed
@andreahmed由於沒有接口,不可能編寫通用視圖或代理來顯示/修改數據。 –