QStringList 继承自QList< QString>。功能和QList一样,QStringList也是隐式共享的。它提供了快速的基于索引的访问以及快速的插入和删除操作。将字符串列表作为值参数传递既快速又安全。一般我也是会用这个的,很多Qt的api接口也会用到这个类型作为接口。QList的所有功能也适用于QStringList。
例如,你可以使用isEmpty()来测试列表是否为空,还可以调用append()、prepend()、insert()、replace()、removeAll()、removeAt()、removeFirst()、removeLast() 和removeOne()等函数来修改QStringList。基本上我们能想到的功能,Qt 都做了封装,此外,QStringList提供了一些方便的函数,使处理字符串列表更容易:
默认构造函数创建一个空列表。使用initializer-list构造函数可以创建包含元素的列表:
QStringList fonts = { "Arial", "Helvetica", "Times" };
字符串可以使用insert() append()、+=() 运算符和 <<() 运算符函数添加到列表中。
<<()运算符可以方便地在列表中添加多个元素:
fonts << "Courier" << "Verdana";
要遍历一个列表,你可以使用索引位置,也可以使用QList的java风格和stl风格的迭代器类型:
索引:
for (int i = 0; i < fonts.size(); ++i)
cout << fonts.at(i).toLocal8Bit().constData() << Qt::endl;
java风格的迭代器:
QStringListIterator javaStyleIterator(fonts);
while (javaStyleIterator.hasNext())
cout << javaStyleIterator.next().toLocal8Bit().constData() << Qt::endl;
STL-style迭代器:
QStringList::const_iterator constIterator;
for (constIterator = fonts.constBegin(); constIterator != fonts.constEnd(); ++constIterator)
cout << (*constIterator).toLocal8Bit().constData() << Qt::endl;
QStringListIterator类只是QListIterator的类型定义。QStringList还提供了QMutableStringListIterator类,这是QMutableStringListIterator 的类型定义。
QStringList 提供了几个函数,让你能够操作列表的内容。你可以使用 join() 函数将字符串列表中的所有字符串连接成一个字符串(带有可选的分隔符)。例如:
QString str = fonts.join(", ");
// str == "Arial, Helvetica, Times, Courier"
join() 的参数可以是单个字符,也可以是字符串。
要将一个字符串分解为一个字符串列表,可以使用QString::split()函数:
QStringList list;
list = str.split(',');
// list: ["Arial", "Helvetica", "Times", "Courier"]
split() 的参数可以是一个字符、一个字符串、一个 QRegularExpression或一个(已弃用)QRegExp。
此外,运算符+()函数允许你将两个字符串列表连接为一个。要对字符串列表进行排序,可以使用函数 sort()。
QString列表还提供了filter()函数,它允许您提取仅包含包含特定子字符串(或匹配特定正则表达式)的字符串的新列表:
QStringList monospacedFonts = fonts.filter(QRegularExpression("Courier|Fixed"));
contains()函数指出列表中是否包含给定的字符串,而indexOf()函数返回给定字符串第一次出现的索引。另一方面,lastIndexOf()函数返回的是字符串最后一次出现的索引。
最后,replacestrings()函数依次对字符串列表中的每个字符串调用QString::replace()。例如:
QStringList files;
files << "$QTDIR/src/moc/moc.y"
<< "$QTDIR/src/moc/moc.l"
<< "$QTDIR/include/qconfig.h";
files.replaceInStrings("$QTDIR", "/usr/lib/qt");
// files: [ "/usr/lib/qt/src/moc/moc.y", ...]