QAbstractListModel配合QListView实现延迟加载的简单例子

运行效果

主要代码:

main.cpp

#include <QApplication>
#include <QListView>
#include "listviewmodel.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    ListViewModel listViewModel;
    QListView listView;
    listView.setModel(&listViewModel);
    listView.resize(100, 100);
    listView.show();

    return a.exec();
}

ListViewModel.h

#ifndef LISTVIEWMODEL_H
#define LISTVIEWMODEL_H

#include <QObject>
#include <QAbstractListModel>

class ListViewModel : public QAbstractListModel
{
    Q_OBJECT
public:
    explicit ListViewModel(QObject *parent = 0);
    int rowCount(const QModelIndex &parent) const;
    int columnCount(const QModelIndex &parent) const;
    QVariant data(const QModelIndex &index, int role) const;
    bool canFetchMore(const QModelIndex &parent) const;
    void fetchMore(const QModelIndex &parent);

private:
    QList<QString> m_dataList;

private slots:
    void loadMoreData();
};

#endif // LISTVIEWMODEL_H

ListViewModel.cpp

#include "listviewmodel.h"
#include <QTime>
#include <QTimer>

ListViewModel::ListViewModel(QObject *parent)
    : QAbstractListModel(parent)
{
    QTime time=QTime::currentTime();
    for(int i=0; i<10; i++)
    {
        m_dataList.push_back(QString("%1 -- %2").arg(i).arg(time.toString("hh:mm:ss")));
    }
}

int ListViewModel::rowCount(const QModelIndex &parent) const
{
    return m_dataList.size();
}

int ListViewModel::columnCount(const QModelIndex &parent) const
{
    return 1;
}

QVariant ListViewModel::data(const QModelIndex &index, int role) const
{
    if(role==Qt::DisplayRole)
    {
        return m_dataList.at(index.row());
    }
    return QVariant();
}

bool ListViewModel::canFetchMore(const QModelIndex &parent) const
{
    return true;
}

void ListViewModel::fetchMore(const QModelIndex &parent)
{
    QTimer::singleShot(1000, this, SLOT(loadMoreData()));
}

void ListViewModel::loadMoreData()
{
    int currentSize=m_dataList.size();
    int insertLen=10;

    emit beginInsertRows(QModelIndex(), m_dataList.size(), m_dataList.size()+insertLen-1);

    QTime time=QTime::currentTime();
    for(int i=currentSize; i<currentSize+insertLen; i++)
    {
        m_dataList.push_back(QString("%1 -- %2").arg(i).arg(time.toString("hh:mm:ss")));
    }

    emit endInsertRows();
}

(----------------完--------------)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值