Qt实现QQ好友下拉列表

这篇博客介绍了如何使用Qt实现类似QQ面板的下拉列表功能,包括自定义数据模型来实现删除列表中图标、转移分组下图标以及添加分组等操作。通过示例代码展示了将黑名单中的图标5移动到我的好友分组的过程。虽然目前的程序相对简单,尚无法完全模拟QQ面板的所有功能,但作者表示会继续研究完善。
摘要由CSDN通过智能技术生成

    偶然发现Qt有个控件可以实现下拉列表,所以就试着实现一下类似QQ面板的下拉列表,这里主要实现几个功能:

   1.可以删除列表中图标

   2.可以像qq一样的,把某个分组下的图标转移到另外的分组

  3.添加分组

代码里写了注释了,这里就不重复了,下面直接看代码吧。

自定义的数据模型

ListModel继承了QAbstractListModel,主要是实现要显示的数据结构。用的是model/view的三层结构,这样好拆分


struct ListItemData
{
	QString  iconPath;
	QString  Name;

};

class ListModel:public QAbstractListModel
{
	Q_OBJECT
public:
	ListModel(QObject *parent = NULL);
	~ListModel();

	void init();
	void addItem(ListItemData *pItem);
	QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const ;
	int	rowCount ( const QModelIndex & parent = QModelIndex() ) const;
	void deleteItem(int index);
	ListItemData* getItem(int index );
protected:
private:
	vector<ListItemData*> m_ItemDataVec;
};
ListModel::ListModel( QObject *parent /*= NULL*/ ):QAbstractListModel(parent)
{
	init();
}

ListModel::~ListModel()
{

}

QVariant ListModel::data( const QModelIndex & index, int role /*= Qt::DisplayRole */ ) const
{
	if (index.row() > m_ItemDataVec.size())
	{
		return QVariant();
	} 
	else
	{
	   switch (role)
	   {
	   case Qt::DisplayRole:
		   {
			   return m_ItemDataVec[index.row()]->Name;
		   }
	   	break;
	   case Qt::DecorationRole:
		   {
			   return QIcon(m_ItemDataVec[index.row()]->iconPath);
		   }
		   break;
	 case Qt::SizeHintRole:
		   {
			   return QSize(10,50);

		   }
	   }
	}
	return QVariant();
}



int ListModel::rowCount( const QModelIndex & parent /*= QModelIndex() */ ) const
{
	return m_ItemDataVec.size();
}

void ListModel::init()
{
	for (int i = 1; i < 26; ++i)
	{ 
		ListItemData *pItem = new ListItemData;
		pItem->Name = QString::number(i);
		pItem->iconPath = QString(":/QQPanel/Resources/%1.jpg").arg(i);
		QFile Iconfile(pItem->iconPath);
		if (Iconfile.exists())
		{
			m_ItemDataVec.push_back(pItem);
		}
		
	}
}

void ListM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值