QListview模拟好友列表的生成和排序

以下代码生成主要是展示思想和大概的思路,仅供参考。此项目是内部项目,所以源码只能贴部分。

ps:代码里面list_开头的都是QList<T>;

FriendlistWidget是继承Qwidget的,就把这个当Qwidget就行了。

list_friendlist里面放*FriendlistWidget 方便管理所有的好友QList<*FriendlistWidget> list_pfriendlistwidget。

scrollAreaWithLayout是聊天框。(此代码并未贴聊天框功能 只是提供聊天框的处理方式思路)

主要就是操作model,替换元素 达到模拟刷新的目的。

先上效果图。

 

 

环境 QT5.8.0 

编译器MSVC2015

代码如下

初始化
void init()
{
StandardItemModel *model ;//会话列表模块
model = new QStandardItemModel(ui->listView);//设置到会话列表
ui->listView->setModel(model);
}
void initfriendlist()
{
//生成十个好友,并且系统消息置顶
    for(int num=0;num<10;num++)
    {
        if(num==0)
        {
            pfriendListWidget=new FriendListWidget("系统消息",this);//会话列表
            list_pfriendListWidget.append(pfriendListWidget);
            pscrollAreaWithLayout=new scrollAreaWithLayout(this);//聊天layout
            list_pscrollAreaWithLayout.append(pscrollAreaWithLayout);
            ui->stackedWidget_2->addWidget(list_pscrollAreaWithLayout.at(0));
            QStandardItem *item = new QStandardItem();
            model->appendRow(item);
            QModelIndex index = model->indexFromItem(item);
            ui->listView->setIndexWidget(index, list_pfriendListWidget.at(0));
        }
        else if(num==1)
        {
            pfriendListWidget=new FriendListWidget(QString::number(num),this);//会话列表
            list_pfriendListWidget.append(pfriendListWidget);
            pscrollAreaWithLayout=new scrollAreaWithLayout(this);//聊天layout
            list_pscrollAreaWithLayout.append(pscrollAreaWithLayout);
            ui->stackedWidget_2->addWidget(list_pscrollAreaWithLayout.at(1));
            QStandardItem *item = new QStandardItem();
            model->appendRow(item);
            QModelIndex index = model->indexFromItem(item);
            ui->listView->setIndexWidget(index, list_pfriendListWidget.at(1));
        }
        else
        {

            pfriendListWidget=new FriendListWidget(QString::number(num),this);//会话列表
            list_pfriendListWidget.insert(1,pfriendListWidget);
            pscrollAreaWithLayout=new scrollAreaWithLayout(this);//聊天layout
            list_pscrollAreaWithLayout.insert(1,pscrollAreaWithLayout);
            ui->stackedWidget_2->insertWidget(1,list_pscrollAreaWithLayout.at(1));
            QStandardItem *item = new QStandardItem();
            model->insertRow(1,item);
            QModelIndex index = model->indexFromItem(item);
            ui->listView->setIndexWidget(index, list_pfriendListWidget.at(1));
        }
    }
    // ui->listView->setResizeMode(QListView::Adjust); // 大小变化后重新布局 items
    ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers); // 不允许编辑
    ui->listView->setGridSize(QSize(145,55));//单个item长 宽


}
如果有新用户过来 插入到系统消息下面。
void newtalk()
{
 pfriendListWidget=new FriendListWidget("新用户",this);//会话列表
    list_pfriendListWidget.insert(1,pfriendListWidget);
    pscrollAreaWithLayout=new scrollAreaWithLayout(this);//聊天layout
    list_pscrollAreaWithLayout.insert(1,pscrollAreaWithLayout);
    ui->stackedWidget_2->addWidget(list_pscrollAreaWithLayout.at(1));
    QStandardItem *item = new QStandardItem();
    model->insertRow(1,item);
    QModelIndex index = model->indexFromItem(item);
    ui->listView->setIndexWidget(index, list_pfriendListWidget.at(1));
}
如果第五个好友有新消息,则把第五个好友提到上面 并且操作list进行重排序

void newmessage()
{

    QStandardItem *item = new QStandardItem();
    model->insertRow(1,item);
    QModelIndex index = model->indexFromItem(item);
    ui->listView->setIndexWidget(index, list_pfriendListWidget.at(4));
    model->removeRow(5);
    list_pfriendListWidget.insert(1,list_pfriendListWidget.at(4));
    list_pfriendListWidget.removeAt(5);

}

使用Qlistwidget更方便,但是用Qlistview可以自己造很舒服的轮子。一般需求高的就自定义Qlistview,需求低的就用QlistWidget,毕竟Qlistwidget是qlistview子类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值