在上一篇博客的工程里用到的数据条目Item,作为实验,是直接采纳的QTableWidgetItem。由于具体的工程里包含的数据各不相同,直接采纳QTableWidgetItem肯定是不合适的。解决办法有两种选择,一是子类化QTableWidgetItem,二是完全重新建立一个自定义类。此处选择后者,建立一个叫SearchItem的自定义类,专门对从服务器搜索到的联系人资料进行封装。联系人的资料有:账号、头像、出生年份、国家、省份、城市和昵称。
本类除了包括7个变量存储联系人资料外,另外只需实现2个函数,一个是自定义的paint函数,供委托调用;一个是sizeHint函数,返回本Item的尺寸大小。
本类最关键的地方在于:由于是自定义类,要想融入Qt元对象系统(meta-object system),能和QVariant一同使用,必要要使用Q_DECLARE_METATYPE()宏对它进行声明;此外,本类还必须包括一个无参数的构造函数。
以下是具体代码:
search_item.h
#ifndef SEARCH_ITEM_H
#define SEARCH_ITEM_H
#include <QMetaType>
//这里必须要include <QString>,否则报错
#include <QString>
class QPainter;
class QSize;
class QRect;
class SearchItem
{
public:
SearchItem();//默认无参构造函数、不可少
SearchItem(quint32 id=0,
quint8 icon=0,
qu