c++ - Qt Creator 尝试拆分 QString 时出错

标签 c++ qt qt-creator qt6

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

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

理想情况下我会得到:

list.at(0); = "hello"  
list.at(1); = "world~how~are~you"

但是这会引发错误。

.... 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 的最佳方法,所以如果有人有更好的建议,我很乐意尝试。 与此同时,我想我会完全分开它。使用第一个条目,然后将其余条目重新附加在一起。

最佳答案

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"

关于c++ - Qt Creator 尝试拆分 QString 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75647950/

相关文章:

c++ - 如何在 Ubuntu 中将 Qt 源添加到 QtCreator?

c++ - 如何确定在二进制文件中调用了哪些函数?

c++ - 如何通过引用将存储在列表中的结构成员传递给函数?

c++ - 为什么编译时浮点计算的结果可能与运行时计算的结果不同?

c++ - QTableWidget - setCellWidget 缺少添加?

qt - 使用 modeltest 进行 QAbstractItemModel 测试

c++ - 从汇编代码调用c库函数时运行错误

c++ - 运行 QT Creator 的项目 .exe 给出 0xc000007b 错误

c++ - 如何优雅地退出多线程应用程序?

c++ - 如何在 QT Creator 中关闭 g++ 中的 unicode 标志?