将 QList<std::string> 转换为 QList<QString>

Posted

技术标签:

【中文标题】将 QList<std::string> 转换为 QList<QString>【英文标题】:Convert QList<std::string> to QList<QString> 【发布时间】:2015-07-10 03:28:19 【问题描述】:

有没有一种简单的方法可以从QList&lt;std::string&gt; 创建一个QList&lt;QString&gt;

(不迭代QList&lt;std::string&gt;并将每个元素添加到QList&lt;QString&gt;

【问题讨论】:

唯一的方法是创建一个新的 QList 并对其进行迭代。您可能可以使用 STL 中的一些通用算法来执行此操作。 为什么不想迭代? 【参考方案1】:

答案是否定的。你怎么可能在不迭代的情况下将一个转换成另一个?即使您正在使用某种函数,它也会遍历列表。

【讨论】:

"没有迭代?" - 可能意味着std::transform【参考方案2】:

如果不遍历您的列表,您将无法做到这一点。您仍然可以高效地执行此操作,避免不必要的复制和重新分配:

QList<std::string> listStd;
listStd << "one" << "two" << "three";

QList<QString> listQt;
listQt.reserve(listStd.length());
for(const std::string& s : listStd)

    listQt.append(QString::fromStdString(s));


// listQt: "one", "two", "three"

如果你不想转换,你可以把你的std::string直接保存为QString,这样就不用以后再转换了。

QList<QString> lst; // or you can use the typedef QStringList 
....
std::string s = getting_a_std_string_from_this_function();
lst.append(QString::fromStdString(s));

【讨论】:

以上是关于将 QList<std::string> 转换为 QList<QString>的主要内容,如果未能解决你的问题,请参考以下文章

如何将 std::vector<std::string> 转换为 C api 的 char*[] [重复]

无法将 QList<QUrl> 分配给 QString

将 std::basic_string<Char> 转换为字符串

std::atomic<std::string> 是不是正常工作?

用于 QList 的 QSetting<数据类型>

QT:将 QTextStream 存储在 QList 中