在使用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);