2013-11-25 28 views
0

我試圖分割一個QString(文件名),我想要獲取部分在filname中的兩個破折號之間。分割QString在 - (短劃線)字符,列表項訪問

Filname例如是「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 ASSERT失敗::在: 「索引超出範圍」 ......

不過,如果我嘗試使用:

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

我得到正確的輸出:

「0000000398_05WA」

什麼錯了?

+3

斷言是否與具有正確輸出的斷言在相同的迭代中發生? – Angew

+0

是的,它的確如此。如果我訪問位置0,它工作正常。 – refuzee

回答

2

你也可以使用section

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

因爲我需要兩個數字,我決定去:'\t part = filename.section(「 - 」,1,1); \t filename = filename.section(「 - 」,2,2); \t parttwo = filename.section(「。」,0,0);' - 謝謝! – refuzee

0

只是爲了解決原mehtod:

如果有人想用QString.split去在這種情況下:

加入

qDirPictures.setFilter(QDir::Files); 

之前的while循環使它與QString.split很好地工作原始代碼。事實證明,沒有任何過濾器前兩個輸出線或目錄列表項是:

"." 

".." 

這導致出界失誤。