QByteArray到QString到std :: stringstream不起作用

时间:2014-10-10 07:31:49

标签: c++ qt parsing stringstream qstring

任何人都知道为什么

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");
       }

目前它只查看“属性错误”。但它应该在我的控制台中打印解析后的字符串

3 个答案:

答案 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;

我相信它会奏效。