其他分享
首页 > 其他分享> > Qt之QList类介绍

Qt之QList类介绍

作者:互联网

QList类

QList类是一个提供列表的模板类,要使用这个类,头文件需要导入QList库:

#include <QList>

在qmake.pro文件中加入QList类的支持:

QT += core

QList的派生类有:QByteArrayList, QItemSelection, QQueue还有 QStringList

公共类型:

classconst_iterator
classiterator
typedefConstIterator
typedefIterator
typedefconst_pointer
typedefconst_reference
typedefconst_reverse_iterator
typedefdifference_type
typedefpointer
typedefreference
typedefreverse_iterator
typedefsize_type
typedefvalue_type

公共方法

QList(InputIterator first, InputIterator last)
QList(std::initializer_list args)
QList(QList &&other)
QList(const QList &other)
QList()
QList &operator=(QList &&other)
QList &operator=(const QList &other)
~QList()
voidappend(const T &value)
voidappend(const QList &value)
const T &at(int i) const
T &back()
const T &back() const
QList::iteratorbegin()
QList::const_iteratorbegin() const
QList::const_iteratorcbegin() const
QList::const_iteratorcend() const
voidclear()
QList::const_iteratorconstBegin() const
QList::const_iteratorconstEnd() const
const T &constFirst() const
const T &constLast() const
boolcontains(const T &value) const
intcount(const T &value) const
intcount() const
QList::const_reverse_iteratorcrbegin() const
QList::const_reverse_iteratorcrend() const
boolempty() const
QList::iteratorend()
QList::const_iteratorend() const
boolendsWith(const T &value) const
QList::iteratorerase(QList::iterator pos)
QList::iteratorerase(QList::iterator begin, QList::iterator end)
T &first()
const T &first() const
T &front()
const T &front() const
intindexOf(const T &value, int from = 0) const
voidinsert(int i, const T &value)
QList::iteratorinsert(QList::iterator before, const T &value)
boolisEmpty() const
T &last()
const T &last() const
intlastIndexOf(const T &value, int from = -1) const
intlength() const
QListmid(int pos, int length = -1) const
voidmove(int from, int to)
voidpop_back()
voidpop_front()
voidprepend(const T &value)
voidpush_back(const T &value)
voidpush_front(const T &value)
QList::reverse_iteratorrbegin()
QList::const_reverse_iteratorrbegin() const
intremoveAll(const T &value)
voidremoveAt(int i)
voidremoveFirst()
voidremoveLast()
boolremoveOne(const T &value)
QList::reverse_iteratorrend()
QList::const_reverse_iteratorrend() const
voidreplace(int i, const T &value)
voidreserve(int alloc)
intsize() const
boolstartsWith(const T &value) const
voidswap(QList &other)
voidswapItemsAt(int i, int j)
TtakeAt(int i)
TtakeFirst()
TtakeLast()
QSettoSet() const
std::listtoStdList() const
QVectortoVector() const
Tvalue(int i) const
Tvalue(int i, const T &defaultValue) const
booloperator!=(const QList &other) const
QListoperator+(const QList &other) const
QList &operator+=(const QList &other)
QList &operator+=(const T &value)
QList &operator<<(const QList &other)
QList &operator<<(const T &value)
booloperator==(const QList &other) const
T &operator[](int i)
const T &operator[](int i) const

静态公共成员

QListfromSet(const QSet &set)
QListfromStdList(const std::list &list)
QListfromVector(const QVector &vector)

相关非成员

uintqHash(const QList &key, uint seed = 0)
booloperator<(const QList &lhs, const QList &rhs)
QDataStream &operator<<(QDataStream &out, const QList &list)
booloperator<=(const QList &lhs, const QList &rhs)
booloperator>(const QList &lhs, const QList &rhs)
booloperator>=(const QList &lhs, const QList &rhs)
QDataStream &operator>>(QDataStream &in, QList &list)

详细描述

QList是Qt的通用容器类之一,它将项目存储在一个列表中,该列表提供基于索引的快速访问和基于索引的插入和删除。
QList、QLinkedList < T >、QVector提供了类似的API和功能,它们通常可以互换,但会产生性能后果,以下是用例概述:

注意:QVector和QVarLengthArray都保证C兼容的数组布局,QList没有,如果您的应用程序必须与C API接口,这可能很重要
注意:只要被引用的项保留在容器中,进入QLinkedList的迭代器和对堆分配QLists的引用就保持有效,对于迭代器和对QVector的引用以及非堆分配QLists来说,情况并非如此
在内部,如果sizeof(T) <= sizeof(void*)和T已使用Q_DECLARE_TYPEINFO声明为Q _ MOBILITY _TYPE或Q 原语 TYPe,则QList表示为T的数组。否则,QList被表示为一个T*的数组,项目被分配到堆上
数组表示允许非常快速的插入和基于索引的访问。prepend()和append()操作也非常快,因为QList在其内部数组的两端预分配内存
但是,请注意,当不满足上面指定的条件时,每次追加或插入新项目都需要在堆上分配新项目,这种每项目分配将使QVector成为进行大量追加或插入的用例的更好选择,因为QVector可以在单个堆分配中为许多项目分配内存
请注意,内部数组只会在列表的生命周期内变大,从来不缩水,当一个列表被分配给另一个列表时,内部数组由析构函数和赋值运算符解除分配
下面是一个存储整数的QList和一个存储QDate值的QList的例子:

QList<int> integerList;
QList<QDate> dateList;

Qt包含一个继承QList的QStringList类,并添加了一些方便的函数,如QStringList::join()和QStringList::filter(),QString::split()从字符串创建QStringLists
QList存储一个项目列表,默认构造函数创建一个空列表,您可以使用初始值设定项列表构造函数来创建包含元素的列表:

QList<QString> list = { "one", "two", "three" };
QList<int> colindexs = {15,14,13,11,8,7,6,5,1,0};

QList provides these basic functions to add, move, and remove items: insert(), replace(), removeAt(), move(), and swap(). In addition, it provides the following convenience functions: append(), operator<<(), operator+=(), prepend(), removeFirst(), and removeLast().
QList提供了这些添加、移动和移除项目的基本功能:insert()、replace()、removeAt()、move()和swap(),此外,它还提供了以下方便的函数:append()、operator < <()、operator+=()、prepend()、removeFirst()和removeLast()
运算符<<()允许方便地向列表中添加多个元素:

list << "four" << "five";
colindexs << 15 << 14 << 13 << 11 << 8 << 7 << 6 << 5 << 1 << 0;

QList使用基于0的索引,就像C++数组一样,要访问特定索引位置的项目,可以使用运算符[](),在非常量列表中,运算符[]()返回对该项的引用,可用于赋值的左侧:

if (list[0] == "Bob")
    list[0] = "Robert";

因为QList是作为大于指针或不可移动的类型的指针数组来实现的,所以这个操作需要(常量时间),对于只读访问,另一种语法是使用at():

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

at()可能比operator[]()快,因为它不会导致深度复制发生
一个常见的要求是从列表中删除一个项目,并对其进行处理,为此,QList提供了takeAt(),takeFirst()和takeLast(),这里有一个循环,每次从列表中删除一个项目,并对它们调用delete:

QList<QWidget *> list;
...
while (!list.isEmpty())
    delete list.takeFirst();

在列表的两端插入和移除项目非常快(在大多数情况下是恒定时间),因为QList在其内部缓冲区的两端预分配额外的空间,以允许列表两端的快速增长
如果要查找列表中某个特定值的所有匹配项,请使用indexOf()或lastIndexOf(),前者从给定的索引位置开始向前搜索,后者向后搜索,如果找到匹配项,两者都返回匹配项的索引;否则,它们返回-1。例如:

int i = list.indexOf("Jane");
if (i != -1)
    cout << "First occurrence of Jane is at position " << i << Qt::endl;

如果您只想检查列表是否包含特定值,请使用contains(),如果您想知道某个特定值在列表中出现的次数,请使用count(),如果要用另一个值替换某个特定值的所有出现,请使用replace()
QList的值类型必须是可赋值的数据类型,这涵盖了大多数常用的数据类型,但是编译器不会让你这样做,例如,将一个QWidget存储为一个值;相反,存储一个QWidget *,少数功能有附加要求;例如,indexOf()和lastIndexOf()期望值类型支持运算符==(),这些要求以每个功能为基础进行记录
和其他容器类一样,QList提供了Java风格的迭代器(QListIterator和QListIterator)和STL风格的迭代器(QList::const_iterator和QList::iterator),实际上,这些很少使用,因为您可以在QList中使用索引,QList的实现方式是基于索引的直接访问和使用迭代器一样快
QList不支持插入、前置、追加或替换对其自身值的引用,这样做会导致您的应用程序中止,并显示一条错误消息
为了使QList尽可能高效,它的成员函数在使用它之前不会验证它们的输入,除了isEmpty(),成员函数总是假设列表不为空,以索引值为参数的成员函数总是假定其索引值参数在有效范围内,这意味着QList成员函数可能会失败,如果您在编译时定义了QT_NO_DEBUG,将不会检测到失败,如果您没有定义QT_NO_DEBUG,将使用带有适当消息的Q_ASSERT()或Q_ASSERT_X()来检测故障
为了避免列表为空时失败,请在调用其他成员函数之前调用isEmpty(),如果必须传递可能不在有效范围内的索引值,请检查该值是否小于size()返回的值,但不小于0

更多成员

如果T是一个QByteArray,这个类还有几个成员可以使用,有关更多信息,请参见QByteArrayList的文档,如果T是QString,这个类有以下附加成员: filter, join, removeDuplicates, sort

成员类型文档

成员函数文档

QList<QString> list;
list.append("one");
list.append("two");
list.append("three");
// list: ["one", "two", "three"]

这与list.insert(size(),value)相同

标签:const,Qt,int,list,介绍,列表,value,QList
来源: https://blog.csdn.net/mabiao0825/article/details/115759476