【问题标题】:Split QString at - (dash) character, list item access在 - (破折号)字符处拆分 QString,列表项访问
【发布时间】:2013-11-25 14:55:45
【问题描述】:

我试图拆分一个 QString(一个文件名),我想在文件名中的两个破折号之间获取部分。

电影名称例如是“0000000398_05WA-1384864213-218.bmp”。

然而,

QStringList query;
QString filename;
QDirIterator it(qDirPictures, QDirIterator::NoIteratorFlags);

while (it.hasNext()) {

    it.next();
    filename = it.fileName();

    query = filename.split("-");

    qDebug()<<query;
}

给我一​​个正确的输出:

("0000000398_05WA", "1384864213", "218.bmp")

但如果我想在同一迭代中访问第二个列表项:

qDebug()<<query.at(1);

我得到一个

“QList::at 中的 ASSERT 失败:“索引超出范围”...

但是,如果我尝试:

qDebug()<<query.at(0);

我得到正确的输出:

“0000000398_05WA”

怎么了?

【问题讨论】:

  • 断言是否发生在与输出正确的迭代相同的迭代中?
  • 是的,确实如此。如果我访问位置 0,它工作正常。

标签: c++ qt qstring


【解决方案1】:

你也可以使用section

QDebug() << filename.section("_",1,1); // will print "1384864213"

【讨论】:

  • 因为我需要两个数字,所以我决定使用:` part = filename.section("-",1,1);文件名 = 文件名.section("-",2,2); parttwo = filename.section(".",0,0);` - 谢谢!
【解决方案2】:

只是为了解决原来的方法:

如果有人想在这种情况下使用 QString.split:

添加

qDirPictures.setFilter(QDir::Files);

在 while 循环之前,它可以很好地与原始代码一起使用 QString.split。事实证明,没有任何过滤器的前两个输出行或目录列表项是:

"." 

".." 

这会导致越界错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2016-12-17
    相关资源
    最近更新 更多