任何人都知道为什么
QString Lulu ( data ); //data is a QByteArry ( from a QNetworkrequest )
std::stringstream streamedJson ;
// QString Lulu ( data.data() );
qDebug()<< "Lulu:" << Lulu; // here it views the right string
streamedJson << Lulu.toStdString();
qDebug() << "streamedJson: "<< streamedJson ; // here it views 0x7fffc9d46568
不起作用? 为什么它不在这里查看字符串? 最后我会解析它并将解析后的字符串输出
boost::property_tree::ptree propertyTree;
try
{
boost::property_tree::json_parser::read_json(streamedJson, propertyTree);
}
catch(boost::property_tree::json_parser::json_parser_error& ex)
{
qDebug() << "ex: "<< ex.what(); // this and Lulu views the same (unparsed) string
qDebug ("propertyree error");
}
目前它只查看“属性错误”。但它应该在我的控制台中打印解析后的字符串
答案 0 :(得分:1)
std::stringstream
无法直接与QDebug::operator<<
一起使用。您可以将其显式转换为QString
。例如,
qDebug() << "streamedJson: " << QString::fromStdString(streamedJson.str());
streamedJson.str()
返回std::string
,然后使用QString
转换为QString::fromStdString
。
您的程序打印0x7fffc9d46568
可能是因为streamedJson
隐式转换为qDebug
- 可打印对象。或者,程序中某处有一个operator<<
函数,可以std::stringstream
作为输入。
答案 1 :(得分:0)
尝试初始化QString
变量,如下所述,尝试将值放入std::string
变量,然后再将其推入std::stringstream
。
QString Lulu = QString(data);
std::stringstream streamedJson ;
std::string strLulu = Lulu.toStdString();
streamedJson << strLulu;
qDebug() << "streamedJson: "<< streamedJson;
希望这有帮助。
答案 2 :(得分:-1)
班级QString
的功能为std::string toStdString() const
。也许你应该这样使用它:
streamedJson << Lulu.toStdString();
如果不起作用,您可以尝试
streamedJson << Lulu.toStdString().c_str();
如果它也不起作用,我们会找到另一种可能的解决方案。祝你好运!
修改强>
我已经阅读了几份文件,我想我已经解决了你的问题。类std::stringstream
具有字符串的内部表示。要从此类中获取std::string
,您应该使用其函数str()
:
http://www.cplusplus.com/reference/sstream/stringstream/str/
那么你的代码应该是这样的:
string myString = streamedJson.str();
std::cout << myString;
我相信它会奏效。