将QStringList的PushBack(push_back())元素转换为vector <string> </string>

时间:2013-12-03 13:35:41

标签: c++ qt vector

如何在QStringList类型中访问vector<string>的元素。 push_back不起作用。 insert也只需要另一个vector类型。

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QStringList>
#include <vector>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
        QCoreApplication a(argc, argv);
        std::vector<string> vec;
        QString winter = "December, January, February";
        QString spring = "March, April, May";
        QString summer = "June, July, August";
        QString fall = "September, October, November";
        QStringList list;
        list << winter;
        list += spring;
        list.append(summer);
        list << fall;
        qDebug() << "The Spring months are: " << list[1] ;
        qDebug() << list.size();

        for(int i=0;i<list.size();i++)
        {
        //vec.push_back(list[i]);
        }
        exit(0);
        return a.exec();
}

2 个答案:

答案 0 :(得分:2)

QString不是std :: string。您不能将它直接添加到std :: string的向量中。你必须先将它转换为std :: string。

此外,QString是一个UTF-16字符串,并且与UTF-8 std :: string不兼容,因此可以像这样使用std :: wstring

for(int i=0;i<list.size();i++)
{
   vec.push_back(list[i].constData());
}

或者像这样的std :: string:

for(int i=0;i<list.size();i++)
{
   vec.push_back(list[i].toUtf8().constData());
}

希望这有效/帮助

来源:

How to convert QString to std::string?

答案 1 :(得分:2)

我会这样做:

foreach( QString str, list) {
  vec.push_back(str.toStdString());
}