天天看點

Qt之界面資料存儲與擷取簡述常見接口資料源setData()和data()setItemData()和itemData()setUserData()和userData()自定義資料

在gui開發中,往往需要在界面中存儲一些有用的資料,這些資料可以來自配置檔案、系統資料庫、資料庫、或者是server。

無論來自哪裡,這些資料對于使用者來說都是至關重要的,它們在互動過程中大部分都會被用到,例如:單擊一個使用者頭像,顯示該使用者的詳細資訊(等級、昵稱、姓名、個人說明)。

<a href="#%e7%ae%80%e8%bf%b0">簡述</a>

<a href="#%e5%b8%b8%e8%a7%81%e6%8e%a5%e5%8f%a3">常見接口</a>

<a href="#%e6%95%b0%e6%8d%ae%e6%ba%90">資料源</a>

<a href="#setdata%e5%92%8cdata">setdata和data</a>

<a href="#%e5%8d%95%e7%8b%ac%e5%ad%98%e5%82%a8">單獨存儲</a>

<a href="#%e6%95%b4%e4%bd%93%e5%ad%98%e5%82%a8">整體存儲</a>

<a href="#setitemdata%e5%92%8citemdata">setitemdata和itemdata</a>

<a href="#setuserdata%e5%92%8cuserdata">setuserdata和userdata</a>

<a href="#%e8%87%aa%e5%ae%9a%e4%b9%89%e6%95%b0%e6%8d%ae">自定義資料</a>

qt中,可以通過絕大部分已有的接口來存數資料、擷取資料。例如:

存儲資料

setdata()

setitemdata()

setuserdata()

擷取資料:

data()

itemdata()

userdata()

常用的基本就這些,當然,還有其他的一些接口。。。

為了便于示範,我們定義兩個資料源:結構體user、枚舉language。

其中,user定義為qobjectuserdata類型,為了後面setuserdata()和userdata()使用。如果不使用這兩個接口,則不需要定義為qobjectuserdata。

絕大部分存儲使用者資料的接口都使用的是qvariant,也就是我們常說的“萬能變量”。對于自定義資料類型,如果要使用qvariant,就必須使用q_declare_metatype注冊。

建立一個qlistwidget清單,添加5個item項,然後給每一個都存儲屬于自己的資料。

Qt之界面資料存儲與擷取簡述常見接口資料源setData()和data()setItemData()和itemData()setUserData()和userData()自定義資料

通過setdata(),我們可以單獨存儲使用者資料,使用qt::userrole、qt::userrole + 1……

槽函數,擷取使用者資料,執行相應操作。

也可以通過setdata()進行整體存儲,這時候隻需要使用qt::userrole即可,把使用者資料當成一個結構體來存儲。

無論那種方式都可以,如果在信号和槽的傳遞過程中,參數過多,建議使用“整體存儲”方式。

通過setuserdata(),我們可以存儲使用者資料。

注意:使用者資料需要被定義為qobjectuserdata類型。

通過userdata()可以擷取qobjectuserdata資料,然後轉換成我們需要的類型user。

用現有的接口固然友善,有時對于複雜的功能,我們也不得不自定義。

舉一個簡單的例子:

我們定義了一個按鈕qpushbutton,可以通過setid()、setname()來設定id和名稱資訊,如果要擷取資訊,則可以調用id()、name()函數。

使用很簡單:

基本的資料存儲與擷取方式就這些,以後會經常用到,good luck。