在使用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檔案中包...