QVariant 與 自定義型別 的轉換

2021-07-10 01:11:06 字數 1099 閱讀 8997

在使用vc、delphi編寫使用者介面程式的時候,經常會把物件與控制項的data域進行繫結,便於程式執行中讀寫提高效率。然而在qt程式設計中怎麼實現這個功能呢?比如將乙個使用者自定義的結構體與qcombobox控制項的data繫結?

qt的聯機幫助做的實在是差強人意,示例**太少了。除錯了半天,看到這篇文章給了我提示。主要步驟如下:

1、將自定義資料型別使用q_declare_metatype巨集進行宣告,便於編譯器識別。

2、在插入物件的時候,宣告qvariant物件,使用其setvalue方法新增自定義物件。

3、在讀取的時候,採用qvariant物件的value方法返回自定義物件。

示例**如下:

1、自定義結構體及元型別宣告:

struct mystruct  

;  mystruct stu;  

q_declare_metatype(mystruct)  

2、在程式初始化中,給結構體初始化並儲存到qcombobox的data域中:

bzero(&stu, sizeof(mystruct)); //stu就是上面宣告的全域性變數

//賦初值

stu.a = 100;  

strcpy(stu.b,"hello./n");  

//型別轉換

qvariant v;  

qstring ss = qstring("%1").arg(stu.b);  

v.setvalue(stu);  

//儲存到控制項data中

ui->cbotest->additem(ss, v);  

ui->cbotest->additem("aadkjf", 0);  

3、讀取的時候反過來處理,如下:

qvariant v;  

//從控制項data域取得variant物件

v = ui->cbotest->itemdata(0);  

//轉換為自定義的結構體例項

mystruct s = v.value();  

printf("value=%d:%s/n",s.a, s.b);  

讓QVariant認識自定義資料型別

這裡我們使用下面這個struct來做說明 這裡不管是struct還是class都一樣 struct player 為了能在qvariant中使用自定義資料型別做,需要使用q declare metatype 來向qt的元系統宣告這個自定義型別。如下列所示 struct player q declar...

自定義資料型別使用QVariant轉換的方法

qvariant型別的放入和取出必須是相對應的,你放入乙個int就必須按int取出,不能用tostring qt不會幫你自動轉換。資料核心無非就是乙個 union,和乙個標記型別的type 傳遞的是整數 123,那麼它union儲存整數123,同時type標誌int 如果傳遞字串,union儲存字串...

巨集定義與自定義型別

define int ptr int 這是巨集定義,編譯預處理階段要進行巨集替換,int ptr a,b會變成 int a,b 所以b不是指標型別 typedef int int ptr 這是自定義型別,也就是把int ptr定義為 int型指標,編譯階段會把c,d都識別為指標 test.c檔案中包...