Qt Creator Error when trying to split a QString

问题描述 投票:0回答:1

我有一个字符串,我试图在分隔符的第一个实例上拆分,在本例中为“~”。这些是我正在拨打的电话:

    QString line = "hello~world~how~are~you";
    QStringList list = line.split("~", Qt::SplitLimit::KeepEmptyParts, Qt::CaseSensitive);

理想情况下我会得到:

list.at(0); =“你好”
列表(1); =“世界~怎么样~是~你”

但是这会引发错误。


.... error: 'Qt::SplitLimit' has not been declared
.... In function 'int qMain(int, char**)':

我在 Microsoft Windows 10 上使用 Qt Creator 6.4.2 版,我正在尝试用 C++ 编写代码。我正在使用 CMake 构建系统。我在项目中包含了 QtCore,所以这不应该是问题。

我不知道这是否是拆分 QString 的最佳方式,所以如果有人有更好的建议,我很乐意尝试。 与此同时,我想我会完全拆分它。使用第一个条目,然后将其余条目重新附加在一起。

c++ qt qt-creator qt6
1个回答
0
投票

split
方法的第二个参数是
Qt::SplitBehavior
类型,如评论中所述,它是一个老式枚举,而不是 C++11 枚举类。

QStringList QString::split(const QString &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

所以你应该使用:

QStringList list = line.split("~", Qt::KeepEmptyParts, Qt::CaseSensitive);

但是,QString 的 split 方法在 sep 出现的地方将字符串拆分为子字符串,并返回这些字符串的列表。 您不能使用

split
方法部分拆分字符串。

要仅在分隔符第一次出现时拆分,请使用

indexof
方法,如下所示:

auto idx = line.indexOf('~');
auto part= line.mid(0, idx);
auto rest = line.mid(idx+1);
qDebug() << part;
qDebug() << rest;

输出:

"hello"
"world~how~are~you"
© www.soinside.com 2019 - 2024. All rights reserved.