QT菜鸟入门第二弹:QList和C++类模板


上次我们遇到了形如 QList<QStringList> rows 的看起来古怪的表达方式。

当然了,看起来古怪主要是因为我的C++学的不好啊,然后我就查了一下手头的书《21天学通C++第六版》,在其258页,15.4节,进行了“模板简介”的讲解。

顺带的,在QT Creator里,在QList上按下F1查看帮助文档。

这顺序其实应该是先看了帮助文档,发现这是一个QList<T>的东西,然后才知道这个东西长的跟模板有关系,然后才去找的书,然后才发现还有函数模板,然后才确定这是类模板……

模板类,类模板@@,好吧它们之间或许真的有语意上的细微区别,但是我是目前理解它们是一样的了。书上说道“模板类是模板化的C++类”,然后给出了一个例子:

  1. template <typename T>   
  2. class CMyFirstTemplateClass   
  3. {   
  4. public:   
  5.     void SetVariable(T& newValue) {m_Value = newValue;};   
  6.     T& GetValue(){return m_Value;};   
  7. private:   
  8.     T m_Value;   
  9. };  

是吧,有例子就比没有例子强啊,而且这里有一点,模板之前讲的是宏定义,而且说了,宏函数不是类型安全的,模板则是安全的,因此模板就有了跟宏相似的地方——替换。

先说一下这个例子,这个例子使用的时候比如是CMyFirstTemplate<int>abcd; 这个int就替换掉了声明里面的T,因此这个T就是个类似未知数变量之类的东西了,打酱油的。

如此说来我们用到的QList<QStringList>就是把QList中的类型指定为QStringList了。

然后看看QT的帮助文档,上面说道:

QList类是一个模板类,提供了列表。

QList<T>是QT的普通容器类的一种。它存储了一个值的列表,并且提供了基于索引的快速访问,插入,删除等。

然后文档中列出了QList<T>,QLinkedList<T>,QVector<T>三种之间的相同点和不同点,分析优越性啊什么的。

不过目前我还没有关注那么远,就知道平常使用QList就很好了。

帮助文档给出了一些例子:

QList<int> integerList; 存储的整数

QList<QData> dateList; 存储的QDate类型的值

然后就提到了我们用到的那种方式

Qt包含了一个QStringList类,继承了QList<QString>并且添加了一些方便操作的函数,比如QStringList::join() QStringList::find() 等等。

帮助文档继续说到

QList存储了一个条目的列表,默认的构造函数创建了一个空的列表。为了插入条目,可以使用操作符<<();

然后举例子:

QList<QString> list;

list << "one" << "two" << "three";

然后呢,帮助文档说了一下,提供了一些基础函数insert() replace() removeAt() move() swap(),然后还有 append() prepend() removeFirst() removeLast()

然后又提到了Qlist跟数组一样从0开始数

好吧,后面还有不少内容,但是我看不下去了先……,目前了解的基本够我理解程序的了。就是个字符串数组操作么……@@,搞的如此复杂。

最后给出代码,省的再翻了

  1. QList<QStringList> rows = QList<QStringList>()   
  2.                           << (QStringList() << "Verne Nilsen" << "123")   
  3.                           << (QStringList() << "Carlos Tang" << "77")   
  4.                           << (QStringList() << "Bronwyn Hawcroft" << "119")   
  5.                           << (QStringList() << "Alessandro Hanssen" << "32")   
  6.                           << (QStringList() << "Andrew John Bakken" << "54")   
  7.                           << (QStringList() << "Vanessa Weatherley" << "85")   
  8.                           << (QStringList() << "Rebecca Dickens" << "17")   
  9.                           << (QStringList() << "David Bradley" << "42")   
  10.                           << (QStringList() << "Knut Walters" << "25")   
  11.                           << (QStringList() << "Andrea Jones" << "34");  

相关内容