Qt:QList、QStringList
阅读原文时间:2023年07月09日阅读:2

QList

QList

一个QList是存储相同类型一组数据的列表。

QStringList是从QList继承而来,并添加了一些好用的方法,如join()、filter、split()。

1)构造

QList list = { "one", "two", "three" };

2)增删

insert(), replace(), removeAt(), move() 和 swap()。

append(), operator<<(), operator+=(), prepend(), removeFirst() 和 removeLast()

list << "four" << "five";

3)访问

list[i] 与 list.at(i)

at比[ ]速度快,因为不会深拷贝

访问并移除

takeAt(), takeFirst(), and takeLast()

4)查找

indexOf() 、 lastIndexOf()

5)迭代器

Java样式:QListIterator 和 QMutableListIterator

STL样式:QList::const_iterator 和 QList::iterator

6)迭代

//①
for (int i = 0; i < list.size(); ++i) {
if (list.at(i) == "Jane")
cout << "Found Jane at position " << i << Qt::endl;
}

//②
while (!list.isEmpty())
delete list.takeFirst();

Header:

#include

qmake:

QT += core

Inherited By:

QByteArrayListQItemSelectionQQueue, and QStringList

QList list = { "one", "two", "three" };

QList(QList other)

另一个List的副本

QList()

空List

QList

fromVector(const QVector &vector)

从Vector转化

返回值类型

方法

说明

QList &

bool

QList

QList &

QList &

QList &

QList &

bool

T

operator=(QList other)

operator!=(QList other)

operator+(QList other)

operator+=(QList other)

operator+=(T value)

operator<<(QList other)

operator<<(T value)

operator==(QList other)

operator[](int i)

赋值

判断两个QList是否不相等

往List末尾加入另一个QList

往List末尾加入另一个QList

往List末尾加入单个元素

往List末尾加入另一个QList

往List末尾加入单个元素

判断两个QList是否相等

list[i]提取索引i

void

append(T value)

append(QList value)

往List最后添加元素,可以一次添加一个,也可以一次添加一个List

T

at(int i)

访问

T

back()

最后一个元素

QList::iterator

QList::const_iterator

begin()

STL迭代器,指向第一个元素

QList::const_iterator

cbegin()

const STL迭代器,指向第一个元素

QList::const_iterator

cend()

const STL迭代器,指向最后一个元素之后的逻辑元素

void

clear()

清空List

QList::const_iterator

constBegin()

const STL迭代器,指向第一个元素

QList::const_iterator

constEnd()

const STL迭代器,指向最后一个元素之后的逻辑元素

bool

contains(T value)

List中是否包含指定元素

int

count(T value)

count()

统计数量

QList::const_reverse_iterator

crbegin()

const STL逆序迭代器,指向逆序第一个元素

QList::const_reverse_iterator

crend()

const STL逆序迭代器,指向逆序最后一个元素之后的元素

bool

empty()

是否为空

QList::iterator

QList::const_iterator

end()

STL迭代器,指向最后一个元素之后的逻辑元素

bool 

endsWith(T value)

List是否以value结尾

 QList::iterator

erase(QList::iterator pos)

erase(QList::iterator begin, QList::iterator end)

迭代器,移除指定元素

 T

first()

第一个元素

 T

front()

等同于first()

 int

indexOf(T value, int from = 0)

查找List中value第一次出现的位置

void

QList::iterator

insert(int i, T value)

insert(QList::iterator before, T value)

在指定位置插入

 bool

isEmpty()

是否为空 

 T

last()

最后一个元素

 int

lastIndexOf(T value, int from = -1)

逆序查找List中value第一次出现的位置

 int

length()

List长度,等同于count()

 QList

mid(int pos, int length = -1)

从pos开始长度为length的子List

 void

move(int from, int to)

把list[from]移动到list[to],原来list[from+1]到list[to]前移

void 

pop_back()

等同于removeLast(),移除最后一项

void 

pop_front()

等同于removeFirst(),移除第一项

void 

prepend(T value)

在开头添加元素

void 

push_back(T value)

等同于append(),在末尾添加元素

void 

push_front(T value)

等同于prepend(),在开头添加元素

QList::reverse_iterator

QList::const_reverse_iterator

rbegin()

STL样式迭代器,指向逆序第一个元素

 int

removeAll(T value)

移除List中的所有value

 void

removeAt(int i)

移除list[i]

void 

removeFirst()

移除第一个元素

void 

removeLast()

移除最后一个元素

 bool

removeOne(T value)

移除List中的第一个value

QList::reverse_iterator

QList::const_reverse_iterator

rend()

STL样式逆序迭代器,指向逆序最后一个元素

 void

replace(int i, T value)

替换指定位置的元素,等同于list[i]=value

void 

reserve(int alloc)

保留alloc个元素的空间

 int

size()

List中的元素数

 bool

startsWith(T value)

List是否以value开始

 void

swap(QList &other)

交换两个List的元素

void 

swapItemsAt(int i, int j)

交换List中位置i、j的元素

 T

takeAt(int i)

移除并返回list[i]

takeFirst()

移除并返回第一个元素

takeLast()

移除并返回最后一个元素

QVector 

toVector()

QList转QVector

 T

value(int i)

value(int i, T defaultValue)

等同于list[i],第二个方法指定如果不存在这个元素时返回的默认元素

QStringList

专门存储String的List。

QStringList继承自QList,所有QList的方法都可以用于QStringList,不过QStringList还额外提供了一些更方便的方法。

1)初始化

QStringList fonts = { "Arial", "Helvetica", "Times" };

2)添加元素

insert() 、append()、 operator+=() 、operator<<()

其中operator<<()最方便,且能一次加多个元素:

fonts << "Courier" << "Verdana";

3)迭代

//①索引,标准C++ for循环
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样式迭代器
QStringList::const_iterator constIterator;
for (constIterator = fonts.constBegin(); constIterator != fonts.constEnd();
++constIterator)
cout << (*constIterator).toLocal8Bit().constData() << Qt::endl;

4)连接

用指定分隔符连接:join( seq )

QStringList fonts = \["Arial", "Helvetica", "Times", "Courier"\]  
QString str = fonts.join(", ");  
 // str == "Arial, Helvetica, Times, Courier"

首尾连接:+

5)分割:split( seq )

QStringList list;  
list = str.split(',');  
 // list: \["Arial", "Helvetica", "Times", "Courier"\]

6)排序:sort()

7)筛选:filter()

提取包含指定字串、指定正则表达式的子串

8)查找:contains()、indexOf()、lastIndexOf()

这三个函数功能分别是:是否包含指定字串、指定子串的第一个位置、逆向查看指定子串的第一个位置

9)替换:replaceInStrings()

对QStringList中的每个QString采用同一个替换方法,相当于对List中的所有QString调用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", ...\]

Header:

#include

qmake:

QT += core

Inherits:

QList

QStringList(InputIterator first, InputIterator last)

用迭代器中[first , last)中的内容构造QStrintList,该InputIterator的内容必须是QString

QStringList(std::initializer_list args)

这种构造方法说明可以用

QStringList sl = { "Apple" , "Banana" , "Orange" };

形式来构造QStringList

QStringList(QList other)

用一个QList来构造QStringList

QStringList(QString str)

构造只有单个QString元素str的QStringList

QStringList()

构造空QStringList

除了所有QList的方法外,还有一些QStringList独有的方法,这里只单列出后者:

返回值类型

方法

说明

QStringList &

operator=(QList other)

operator+(QStringList other)

operator<<(QString str)

operator<<(QStringList other)

operator<<(QList other)

赋值

连接

用<<往QStringList中加元素,可以一次加一个QString,也可以一次加一个List或QStringList中的所有元素

 bool

contains(QString str, Qt::CaseSensitivity cs = Qt::CaseSensitive)

是否包含指定QSTRING

 QStringList

filter(QString str, Qt::CaseSensitivity cs = Qt::CaseSensitive)

filter(QRegExp rx)

filter(QRegularExpression r_e_)

筛选所有符合要求的子串构成新的QStringList,后两项说明可以用正则

 int

indexOf(QRegExp rx, int from = 0)

indexOf(QRegularExpression re, int from = 0)

返回第一个符合正则的子串的位置

QString 

join(QString separator)

join(QChar separator)

用指定分隔符连接QStringList中的所有QString

 int

lastIndexOf(QRegExp rx, int from = -1)

lastIndexOf(QRegularExpression re, int from = -1)

逆向查找,返回第一个符合正则的子串的位置

int 

 removeDuplicates()

移除所有List中所有相同的QString,只保留一个

 QStringList &

replaceInStrings(QString before, QString after, Qt::CaseSensitivity cs = Qt::CaseSensitive)

replaceInStrings(QRegExp rx, const QString &after)

replaceInStrings(QRegularExpression re, const QString &after)

用相同规则对List中所有QString进行替换

void 

 sort(Qt::CaseSensitivity cs = Qt::CaseSensitive)

排序