2013-10-30 90 views
1

我有一個Qt(4.7)程序,它接受一個QByteArray,並在使用解析器將其轉換爲QVariant後,將其分解成QVariants列表。當我嘗試使用toList()函數時,問題似乎出現了。我有一些與此類似:Qt QVariant toList不起作用

QVariant var = //whatever the value passed in is... 
std::cout << "Data = " << var.toString().toStdString() << std::endl; 
QList<QVariant> varlist = var.toList(); 
std::cout << "List Size = " << varlist.size() << std::endl; 

這將返回此:

Data = variant1 variant2 variant3 
Size = 0 

在該尺寸應明確爲3。有沒有人有一個想法是什麼我可能做錯了什麼?謝謝!

+0

「無論傳入的值是...」是整個點。傳入的價值是什麼?看起來像**不是** QVariant包裝'QList >'。 – peppe

回答

0

所以,我不知道爲什麼,但是當我把我上面指定到一個單獨的功能,即QList<QVariant> myClass::ToList(QVariant v){return v.toList();},然後調用varlist = myClass::ToList(v)的命令,它的工作原理。仍然不是原來的方式,但這種方式很好。猜猜我會把它記到Qt的怪癖之一......

+1

您是否嘗試過第一個示例而未調用toString()?也許QVariant :: toString()中有一個錯誤? – tharibo

+0

@tharibo本來我就是這麼想的,toString這一行只是一個打印行,用來說明這個時候的數據是什麼。儘管如此,我仍然沒有嘗試過,因爲我仍然不知道它是什麼,並且願意嘗試任何事情來弄清楚哈哈。可悲的是,沒有改變 – thnkwthprtls

2

toList的()的文檔表示:

返回所述變體作爲QVariantList如果所述變體具有用戶類型()QMetaType :: QVariantList或QMetaType :: QStringList中;否則返回一個空列表。

我的猜測是,您的變體的userType()既不是這兩個。

您可能需要以不同方式構建您的變體,例如,

QVariantList list; 
list << variant1 << variant2 << variant3; 
QVariant var = list; 
+0

謝謝,雖然問題是我沒有單獨變量的單獨變量;他們都被帶到了程序中(他們實際上最初是一個QByteArray,它被QJson解析爲一個QVariant),這就是爲什麼我需要它作爲列表來單獨訪問它們的原因。有沒有辦法通過這種方式? – thnkwthprtls

+1

在這種情況下,您手動需要按照組成的方式分解字節數組。也許你也可以使用QJson。 –

+0

你需要檢查'var.type()'的值。似乎'QJson'返回的不是變體列表。如果問題仍然存在,請顯示'var.type()'值,原始json數據和用於解析的代碼。 –