【问题标题】:PushBack (push_back()) elements of QStringList to vector<string>PushBack (push_back()) 的 QStringList 元素到 vector<string>
【发布时间】:2013-12-19 14:20:41
【问题描述】:

如何访问vector&lt;string&gt; 类型中的QStringList 元素。 push_back 不起作用。 inserting 也只需要另一个 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();
}

【问题讨论】:

  • list[i]QStrings,而不是 std::strings。请改用list[i].toStdString()
  • 为什么不呢? vec.push_back(list[i].toStdString());

标签: c++ qt vector


【解决方案1】:

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?

【讨论】:

  • list[i].toSdtString() 会更好(甚至list[i].toStdWString() UTF16 变体)
【解决方案2】:

我会这样做:

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

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2016-03-31
    • 2013-10-26
    • 2013-11-04
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多