QT学习笔记4

这部分主要实现电话簿的前翻和后翻显示功能,主要原理是使用了STL中的迭代器。


用到的数据结构

前面我们用到QMap数据结构存储键-值对,通讯录的name是键,地址contact是值。为了能够浏览前后浏览通信录,这里需要设计一个循环队列,如图所示:

图片

QMap本身有一个迭代器,我们只需要遍历它就可以浏览通信录。

向后翻

void AddressBook::next()
{
    QString name=nameLine->text();
    QMap<QString,QString>::iterator i=contacts.find(name);
    if(i!=contacts.end())
        i++;
    if(i==contacts.end())
        i=contacts.begin();

    nameLine->setText(i.key());
    addressText->setText(i.value());
}

找到QMap的类定义,发现iterator是类中的一个类,用::进行访问。contacts是一个QMap对象。

++是运算符重载,作用相当于链表中的向后移动。

先用新的对象i获取现在显示在name框中的元素,然后调用++使得元素向后移动,即显示后一个元素的key和value。

template <class Key, class T>
class QMap
{
  ...
 class iterator
    {
        friend class const_iterator;
        Node *i;
        ...
    }
}

向前翻

向前翻和向后翻是一样的,注意边界条件的判断。

void AddressBook::next()
{
    QString name=nameLine->text();
    QMap<QString,QString>::iterator i=contacts.find(name);
    if(i!=contacts.end())
        i++;
    if(i==contacts.end())
        i=contacts.begin();

    nameLine->setText(i.key());
    addressText->setText(i.value());
}
    

最后的运行界面如图: 图片 ——————————————————————–

Reference

[1].http://qt-project.org/doc/qt-4.8/tutorials-addressbook-part3.html



Previous     Next
/
Published under (CC) BY-NC-SA in categories C&&C++  tagged with