0
我想使用模板方法value()
將存儲字符串的QVariant
轉換爲值。用toInt()
,toDouble()
等其他方法也可以做同樣的事情。無法檢查值爲()的QVariant轉換
我現在的問題是,使用例如toDouble(bool *ok = Q_NULLPTR)
我可以通過作爲參數指向布爾檢查轉換是否順利..但我不能執行此檢查與value()
。這裏有一個重現它的小例子。
#include <QVariant>
#include <QDebug>
int main()
{
QVariant v;
QString str = "300.0"; //Valid number
v.setValue(str);
QVariant v2;
QString str2 = "3kk.4f"; //Invalid number
v2.setValue(str2);
if(v.canConvert<double>()) {
qDebug() << "Ok QString to double is permitted";
qDebug() << "Result: " << v.value<double>();
}
if(v2.canConvert<double>()) {
qDebug() << "Yes QString to double is already permitted";
qDebug() << "Result: " << v2.value<double>();
//Oh oh result is 0.0 but is string invalid or it really contain value 0 ?
}
return 0;
}
如何做到使用模板方法value()
這種轉換檢查一些建議嗎?
你不能在'value()'之前調用'convert()'並檢查'convert()'的返回值嗎? – peppe
'convert()'需要一個'int targetTypeId',它在當前版本的Qt(5.9)中被標記爲過時,並且它的使用是不鼓勵的[here](http://doc.qt.io/qt-5/qvariant- obsolete.html)。此外,沒有模板方法來保持這個'targetTypeId',並且在我的應用程序中,類型來自模板。 – Elia
呃,不,不要用*表示枚舉。改爲使用'qMetaTypeId()'。請參閱https://doc.qt.io/qt-5/qmetatype.html#qMetaTypeId –
peppe