我正在使用Qt Creator 3.5.1(opensource)基于Utntu 14.04上的Qt 5.5.1(GCC 4.9.1,32位)和开发嵌入式Linux设备的应用程序。在我的应用程序中,我每30秒获得一些货币。所以,在我的主窗口中,我设置了QThread和QTimer,并使用QNetworkAccessManager和QNetworkRequest,我得到了以下数据。现在我的主窗口上有一个6标签,例如;
lblBuy_USD,lblBuy_EUR,lblBuy_STG,lblSale_USD,lblSale_EUR,lblSale_STG
我的问题是我不能在我的Qt中使用json文件。所以,我的问题是如何从QNetworkRequest获取的数据中提取美元销售数据(即3,9500)?
{
"date": "20171108",
"currencies": {
"dollar": {
"buy": "3,8450",
"sale": "3,9500",
"e_buy": "3,8450"
},
"sterling": {
" buy ": "5,0500",
" sale ": "5,1700",
" e_buy ": "5,0500"
},
"euro": {
" buy ": "4,4600",
" sale ": "4,5650",
" e_buy ": "4,4600"
}
}
}
更新: 我使用正则表达式,但我无法获得任何数据。我的标签没有价值。有什么帮助吗?
QString strReply = (QString)currentReply->readAll();
QRegExp rxBUY_USD("dollar.*?buy.*?(\\d+\\,\\d+)");
if( rxBUY_USD.indexIn( strReply ) != -1 )
{
ui->lblBUY_USD->setText( rxBUY_USD.cap( 1 ));
}
答案 0 :(得分:1)
为了获得美元销售,您可以尝试执行以下操作:
QRegularExpression re("dollar.*?sale.*?(\\d+\\,\\d+)"); // Watch the decimal separator
QRegularExpressionMatch match = re.match(s); // s - is the JSON string you got
if (match.hasMatch())
{
QString matched = match.captured(1);
// Convert string to number, if needed.
}
else
{
// Failed to find dollar sales
}
<强>更新强>
使用QRegExp
类(旧):
QRegExp re2("dollar.*sale.*(\\d+\\,\\d+).*");
if (re2.indexIn(s) != -1)
{
QString matched = re2.cap(1);
}