QVariant類及資料的存與取

2021-09-24 14:02:01 字數 1199 閱讀 3794

試想我們的 table單元格可以是string,也可以是int,也可以是乙個顏色值,那麼這麼多型別怎麼返回呢?

於是,qt提供了這個qvariant型別,你可以把這很多態別都存放進去,到需要使用的時候使用一系列的to函式取出來即可。比如你把int包裝成乙個qvariant,使用的時候要用 qvariant::toint()重新取出來。這裡需要注意的是,qvariant型別的放入和取出必須是相對應的,你放入乙個int就必須按int取出,不能用tostring(), qt不會幫你自動轉換。

資料核心無非就是乙個 union,和乙個標記型別的type:傳遞的是整數 123,那麼它union儲存整數123,同時type標誌int;如果傳遞字串,union儲存字串的指標,同時type標誌qstring。qvariant 可以儲存很多qt的資料型別,包括qbrush、qcolor、qdatetime、qpixmap、qpoint和qstring,並且還有c++基本型別,如 int、float等。qvariant還能儲存很多集合型別,如qmap, qstringlist和qlist。item view classes,資料庫模組和qsettings都大量使用了qvariant類,以方便我們讀寫資料。

示例:1.基本資料型別使用

intqvariant var;

var.setvalue(123); //存

int nvar ;

nvar = var.value();//取

qstring

qvariant var2;

var2.setvalue(qstring("world"));//存

qstring strvalue;

strvalue = var2.value();//取

2.qicon等類使用

qicon icon("open.png");

qvariant var3 = icon;        //存

qicon iconvalue = var3.value();//取

3.自定義結構體使用

struct flydata

;q_declare_metatype(flydata);//重點

void xvalidator::slotsend()

void xvalidator::receive(qvariant data)

QVariant 與 自定義型別 的轉換

在使用vc delphi編寫使用者介面程式的時候,經常會把物件與控制項的data域進行繫結,便於程式執行中讀寫提高效率。然而在qt程式設計中怎麼實現這個功能呢?比如將乙個使用者自定義的結構體與qcombobox控制項的data繫結?qt的聯機幫助做的實在是差強人意,示例 太少了。除錯了半天,看到這篇...

orcle資料庫修改已存資料的列的資料型別

要想修改資料庫的某一列的資料型別,該欄位不能有資料,否則無法修改 plsql中會出現如下錯誤 倘若有資料,不能直接在該列上修改字段型別 但還是有方法實現同樣的目的 轉移資料到新的一列 1.建立乙個臨時列 alter table 表名 add 修改的欄位名 字段型別 2.拷貝資料到臨時列 update...

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

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