QListView实现定时刷新自定义数据

QListView实现定时刷新自定义数据

要在Qt中使用QListView实现定时刷新自定义数据结构的显示,你需要遵循以下步骤:

创建一个自定义数据结构,并将其存储在一个QList或QVector等容器中。

创建一个继承自QAbstractListModel的模型类,并实现必要的方法来处理数据和更新视图。在这个模型类中,你需要实现rowCount()、data()和headerData()等方法。

创建一个QListView对象,并将其模型设置为你的自定义模型类。

使用QTimer类来定期更新你的数据结构,并调用QAbstractListModel的reset()方法来更新视图。

自定义model类头文件:

#ifndef VOMODEL_H
#define VOMODEL_H

#include <QObject>
#include <QAbstractListModel>

// 定义自定义数据结构
struct MyData {
    QString name;
    int value;
};
// 创建自定义模型类
class VoModel : public QAbstractListModel
{
public:
    VoModel();

    VoModel(QList<MyData>* data, QObject* parent = nullptr) : QAbstractListModel(parent), m_data(data) {}
    int rowCount(const QModelIndex& parent = QModelIndex()) const override {
        return m_data->size();
    }
    QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override {
        if (!index.isValid()) return QVariant();
        if (role == Qt::DisplayRole) {
            return QString("%1: %2").arg(m_data->at(index.row()).name).arg(m_data->at(index.row()).value);
        }
        return QVariant();
    }
    void setData(QList<MyData>* data)
    {
        m_data = data;
    };

private:
    QList<MyData>* m_data;

};

#endif // VOMODEL_H

在listview控件所在widget窗体头文件中声明变量:

QTimer m_timer;
    QList<MyData> data;
    VoModel model;

widget窗体cpp文件中初始化变量:

// 创建QListView对象并设置模型
    data.append({ "Data 1", 10 });
    data.append({ "Data 2", 20 });
    data.append({ "Data 3", 30 });
    model.setData(&data);
    ui->listView->setModel(&model);
    ui->listView->show();
    connect(&m_timer, &QTimer::timeout, this, [&](){
        data[0].value++;
        data[1].value--;
        ui->listView->reset();
    });
    m_timer.start(1000);
    
完成。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值