3.6 字符串列表類QStringList
字符串列表類QStringList是從QList <QString>繼承而來的,是一個非常有用的類。在處理多個字符串時使用QStringList類有時能事半功倍。
QStringList類可以使用QList類的所有函數(或稱為方法),如append()、prepend()、insert()、replace()、removeAll()、removeAt()、removeFirst()、removeLast()和removeOne()。
1. QStringList類對象的初始化
初始化就是把QString字符串添加到QStringList類對象中,一般使用操作符<<。比如:
QStringList qstrList; qstrList<<"Android" << "Qt Creator" << "Java" << "C++";
2. 增加字符串
QStringList類對象可以通過函數append()或使用查找法<<來添加QString字符串,比如:
QStringList qstrList; qstrList.append("python"); qstrList << "PHP" ;
3. 遍歷QStringList類對象中的元素
可以使用QStringList類的父類QList類的成員函數at()來遍歷QStringList類對象中的元素,該函數的原型聲明如下:
const T &QList::at(int i);
其中,i表示第i個元素,索引值從0開始。
【例3.5】 遍歷QStringList類對象中的元素
(1)啟動Qt Creator 4.8.2,新建一個控制臺項目,項目名為test。
(2)在test.cpp中輸入如下代碼:

其中,QStringLiteral是Qt 5中新引入的一個用來從“字符串常量”創建QString類對象的宏。
(3)按Ctrl+F5快捷鍵運行這個項目,結果如圖3-5所示。

圖3-5
4. 在某位置插入字符串
QStringList類的父類QList類的成員函數insert()可以將字符串插入到QStringList類對象中指定的位置。比如:
QStringList list; list << "alpha" << "beta" << "delta"; //執行后,列表中的內容為["alpha", "beta", "gamma", "delta"] list.insert(2, "gamma");
第一個參數為我們要插入字符串的位置,后面的參數為要插入的字符串。
除了插入操作,QList類的其他一些方法也都可以使用,比如替換、移除等,具體可以參考QList類中的介紹。下面我們看一下QStringList類自身的成員函數。
5. 合并列表中的字符串為一個字符串
可以調用成員函數join()將QStringList類對象中的所有字符串合并為一個字符串。該函數有幾個原型聲明形式:
QString QStringList::join(const QString &separator); QString QStringList::join(QLatin1String separator); QString QStringList::join(QChar separator);
其中,separator是每兩個字符串之間的分隔符字符串;QChar是每兩個字符串之間的分隔符字符。上述函數會返回合并后的字符串。比如:
QStringList qstrList; qstrList<<"Android" << "Qt Creator" << "Java" << "C++"; // qstrList: ["Android ", " Qt Creator ", " Java ", " C++"] QString str = fonts.join(","); //str == "Android,Qt Creator,Java,C++"
6. 拆分字符串
可以調用QString類的成員函數split()將QString字符串拆分為多個QStringList元素。該函數的原型聲明如下:
QStringList QString::split(const QString &sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive);
其中,參數sep是分隔符;KeepEmptyParts表示是否忽略空串;Qt::CaseSensitive表示要區分字母大小寫。該函數返回的是分割后的QStringList類對象。比如:
str == "Arial, Helvetica, Times, Courier"; QStringList list; list = str.split(','); // list: ["Arial", "Helvetica", "Times", "Courier"]
又比如:
QString str = "Android,Qt Creator, ,Java,C++"; QStringList list1 = str.split(","); // list1: [ "Android", "Qt Creator"," ", "Java", "C++" ] QStringList list2 = str.split(",", QString::SkipEmptyParts); // list2:[ "Android", "Qt Creator", "Java", "C++" ]
再比如:
QString str = "a,,b,c"; QStringList list1 = str.split(','); // list1: [ "a", "", "b", "c" ] QStringList list2 = str.split(',', QString::SkipEmptyParts); // list2: [ "a", "b", "c" ]
可以看出,如果有QString::SkipEmptyParts,空項就不會出現在結果中。默認情況下,空項會被保留。
7. 索引位置
成員函數IndexOf()返回指定字符串第一個出現的索引位置。成員函數lastIndexOf()返回字符串最后一次出現的索引位置。比如:
QStringList qstrList; qstrList<<"Java" << "Android" << "Qt Creator" << "Java" << "C++"; int index = qstrList.indexOf("Java");//返回 0 int index = qstrList.indexOf("Java");//返回 3
8. 替換
QStringList類的成員函數replaceInStrings()用來把字符串列表每個元素中的某些字符串替換為新的字符串,該函數的原型聲明如下:
QStringList & replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
其中,參數before是要準備替換掉的源字符串;after是準備用于替換的字符串;Qt::CaseSensitive表示匹配時要區分字母大小寫。比如:
QStringList list; list << "alpha" << "beta" << "gamma" << "epsilon"; list.replaceInStrings("a", "o"); // list == ["olpho", "beto", "gommo", "epsilon"]
又比如:
QStringList files; files << "$file/src/moc/moc.y" << "$file/src/moc/moc.l" << "$file/include/qconfig.h"; files.replaceInStrings("$file", "/usr/file"); // files: [ "/usr/file/src/moc/moc.y", ...]
9. 過濾
QstringList類的成員函數filter()用于提取一個新的列表,該列表每個元素(字符串)必須包含某個特定的字符串。該函數的原型聲明如下:
QStringList filter(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive);
其中,參數str表示要包含在內的字符串;Qt::CaseSensitive表示匹配時要區分字母大小寫,而Qt::CaseInSensitive表示不區分字母大小寫。該函數會返回新的QStringList類對象。比如:
QStringList list; list << "Bill Murray" << "John Doe" << "Bill Clinton"; QStringList result; result = list.filter("Bill"); // result: ["Bill Murray", "Bill Clinton"] result = list.filter("bill",Qt::CaseInSensitive); // result: ["Bill Murray", "Bill Clinton"]
- Visual C++數字圖像模式識別技術詳解
- 物聯網系統開發:從0到1構建IoT平臺(第2版)
- 軟件架構:Python語言實現
- 精通MATLAB(第3版)
- RabbitMQ Essentials
- Python Data Structures and Algorithms
- Python 3.7從入門到精通(視頻教學版)
- MATLAB GUI純代碼編寫從入門到實戰
- Everyday Data Structures
- Bootstrap for Rails
- Python編程入門(第3版)
- Java 7 Concurrency Cookbook
- Unreal Engine Game Development Cookbook
- ASP.NET jQuery Cookbook(Second Edition)
- 流程讓管理更高效:流程管理全套方案制作、設計與優化