qlistview 自定义控件_Qt实现QQ好友下拉列表(用QListView实现,所以还得定义它的Model)...
时间: 2024-02-25 13:52:11 浏览: 26
好的,这是一个不错的问题,让我来简单介绍一下如何使用 Qt 实现 QQ 好友下拉列表。
首先,我们需要使用 QListView 控件来实现下拉列表,然后我们需要定义一个自定义的 Model 来提供数据。这个 Model 可以继承自 QAbstractListModel 类,然后重写一些虚函数来实现自定义 Model 的功能。
下面是一个简单的自定义 Model 的示例代码:
```cpp
class FriendListModel : public QAbstractListModel
{
public:
FriendListModel(QObject *parent = nullptr);
void setFriendList(const QList<QString>& list);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
private:
QList<QString> m_friendList;
};
FriendListModel::FriendListModel(QObject *parent)
: QAbstractListModel(parent)
{
}
void FriendListModel::setFriendList(const QList<QString>& list)
{
m_friendList = list;
emit dataChanged(index(0), index(m_friendList.size()-1));
}
int FriendListModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return m_friendList.size();
}
QVariant FriendListModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.row() >= m_friendList.size() || index.row() < 0)
return QVariant();
if (role == Qt::DisplayRole)
return m_friendList.at(index.row());
else
return QVariant();
}
```
在上面的代码中,我们定义了一个 FriendListModel 类来提供好友列表数据。其中,我们重写了 rowCount() 和 data() 函数来实现自定义 Model 的功能。rowCount() 函数返回列表的行数,data() 函数返回每个单元格的数据。
接着,我们需要在界面中使用 QListView 控件,并设置上述自定义 Model 为其数据源。示例代码如下:
```cpp
QListView* friendListView = new QListView(this);
FriendListModel* friendListModel = new FriendListModel(this);
friendListView->setModel(friendListModel);
friendListModel->setFriendList({"Friend1", "Friend2", "Friend3"});
```
上述代码中,我们使用 QListView 控件来显示好友列表,然后将 FriendListModel 设置为其数据源,并通过 setFriendList() 函数设置好友列表数据。
最后,你还可以根据需要自定义 QListView 的样式,比如设置下拉列表的最大高度、单元格的字体大小、颜色等等。
希望这些信息能够对你有所帮助!