通过分隔符将QString拆分为多个QString?

时间:2020-07-18 13:40:18

标签: c++ qt split

我知道这是一个简单的问题,可以在python中轻松完成,但是我不记得要查找的关键字。

我有一个QStringQString line = "id: John",我想用定界符:拆分它,并将它们存储在两个QString中,而不是QStringList

QString line = "id: John"
QStringList elements = line.split(':');

我想要一个类似这样的衬里,以便我可以用含义名称来引用它们,而不是elements[0]elements[1]

QString title, name = line.split(":");

2 个答案:

答案 0 :(得分:0)

我不确定您说的是什么意思

我可以用含义名称代替withStyles来引用它们,并且 makeStyles

因为无论如何,当您要退回一对elements[0]时,都必须打开elements[1]的包装

您可能会编写这样的函数

QStringList

您可以将其用作

QString

答案 1 :(得分:0)

正如chehrlic的评论所暗示的,要获得一个不错的单行代码,您需要一个小的辅助函数,该函数将QStringList转换为可以与structured binding一起使用的东西。您不能直接使用QStringList,因为结构化绑定是在编译时发生的,并且列表是大小可变的动态结构。整个机制都需要C ++ 17,因此,如果您使用QMake项目,则应将CONFIG += c++17添加到您的pro文件中。

#include <QStringList>
#include <QDebug>
#include <utility> // for std::make_pair

auto getPair(const QStringList &strings) {
    // Since your strings seem to have extra whitespace, I added trimmed call.
    // The value method nicely returns default value if index is out of range.
    return std::make_pair(strings.value(0).trimmed(),
                          strings.value(1).trimmed());
}

void main() { 
    auto input = QStringLiteral("id: John");
    auto [title, name] = getPair(input.split(':'));
    qDebug() << input << "->" << title << name; return 0;
}
相关问题