Qt系列文章之 Model/View 框架
上一篇文章介紹了如何使用QMenu創建鼠標菜單及其和槽函數的關聯,本文開始介紹Qt中十分重要的Model/View 框架。
Model/View 框架
MVC是交互式系統開發中十分重要的體系,MVC 由三種對象組成。模型是應用程序對象,視圖是其在屏幕上的呈現,控制器定義了用戶界面對用戶輸入的反應方式。 在MVC之前,用戶界面設計往往會將這些對象整合在一起。 MVC 使它們解耦以增加靈活性和重用性。在Qt中也包含這三個要素,分別是模型類、視圖類和代理類。三者一起構成了Qt的Model/View 框架。 (如下介紹直接來自Qt的翻譯,摘抄源于https://qtdoc.cn/Src/M/Model_View_Programming/Model_View_Programming.html)
Qt中包含了一系列的項目視圖類,他們使用了模型/視圖架構來管理數據和顯示之間的關系。此架構的功能分離特征給開發人員在自定義項目的呈現形式時帶來了很大的靈活性,并提供標準的模型接口,以允許將各種數據源與現有項目視圖一起使用。在本文檔中,我們對模型/視圖進行了簡要介紹,概述了所涉及的概念,并描述了項目視圖系統的結構特征。介紹了體系結構中的每個組件,并給出了示例,這些示例告訴我們如何使用所提供的類。
如果將視圖和控制器對象組合在一起,就是模型/視圖架構。基于將數據的存儲方式與向用戶呈現的方式分開的原理,模型/視圖架構提供了一個更簡單的框架。這種分離使得可以在幾個不同的視圖中顯示相同的數據,并實現新的視圖類型,而無需更改基礎數據結構。為了靈活處理用戶輸入,我們引入了委托的概念。在此框架中使用委托的好處在于,它允許自定義呈現和編輯數據項的方式。
模型與數據源通信,為架構中的其他組件提供接口。通信的性質取決于數據源的類型以及模型的實現方式。
視圖從模型中獲取模型索引; 這些索引是對數據項的引用。 通過向模型提供模型索引,視圖可以從數據源檢索出數據項。
在標準視圖中,委托負責渲染顯示數據項。 當編輯項目后,委托將直接通過模型索引與模型進行通信。
通常,模型/視圖類可以分為上述三個組:模型,視圖和委托。這些組件中的每個組件都由抽象類定義,這些抽象類提供了公共接口,并在某些情況下提供了一些功能的默認實現。抽象類應被子類化,以提供其他組件期望的全部功能;當然也可以編寫專用組件。
模型、視圖和委托之間通過信號槽通信。
數據源的數據發生改變時模型將發射信號通知視圖。
用戶交互發生改變時,視圖將發射相應的信號。
在編輯期間,委托將發射信號來告知模型和視圖有關編輯器的狀態。
總之,Qt通過自身的模型類、視圖類、代理類及項目之間的信號與槽體系一起構成了強大的MVC框架,實現后端數據-前段顯示的解耦,通過代理模型等手段提供了同一數據不同視圖的效果,大大提高了數據交互的效率。
后文將依次介紹如何基于Qt的MVC框架來開發用戶自己的數據模型和視圖方式,后期還要將模型、視圖和曲線關聯在一起來開發用戶自己的數據分析可視化窗體。
歡迎同好溝通交流,批評指正,歡迎關注我的公號:不如起而行之
總結
以上是生活随笔為你收集整理的Qt系列文章之 Model/View 框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: axios跨域携带cookie_axio
- 下一篇: 对勾函数与双曲线的关系