天天看點

QVariant與自定義資料類型轉換的方法

     在使用VC、Delphi編寫使用者界面程式的時候,經常會把對象與控件的data域進行綁定,便于程式運作中讀寫提高效率。然而在Qt程式設計中怎麼實作這個功能呢?比如将一個使用者自定義的結構體與QComboBox控件的data綁定?

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

    1、将自定義資料類型使用Q_DECLARE_METATYPE宏進行聲明,便于編譯器識别。

    2、在插入對象的時候,聲明QVariant對象,使用其setValue方法添加自定義對象。

    3、在讀取的時候,采用QVariant對象的value方法傳回自定義對象。

    示例代碼如下:

    1、自定義結構體及元類型聲明:

[cpp] view plaincopy

struct MyStruct  

{  

    int a;  

    char b[10];  

};  

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、讀取的時候反過來處理,如下:

//從控件data域取得variant對象  

v = ui->cboTest->itemData(0);  

//轉換為自定義的結構體執行個體  

MyStruct s = v.value<MyStruct>();  

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