Qt ListView 刷新数据

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

在之前的例子中做一些修改,首先不显示ListViewModel数据,当点击鼠标后,显示数据。

几个要点:

用Q_INVOKABLE 创建C++的方法,这样可以在Qml中直接调用

清除model里面的数据必须用beginResetModel和endResetModel方法将清除代码包起来。

看一下完整的代码:

test.qml

import QtQuick 2.0import mylist 1.0ListView {    width: 180; height: 200    model: PeopleListModel {        id: model1    }    delegate: Text {        text: name + ": " + number    }    MouseArea {        anchors.fill: parent        onClicked: model1.reload();    }    }

plugin.cpp

#include <QtQml/QQmlExtensionPlugin>#include <QtQml/qqml.h>#include <qdebug.h>#include <qdatetime.h>#include <qbasictimer.h>#include <qcoreapplication.h>#include <QAbstractItemModel>#include <QStringList>#include <iostream>class People {public:  People(QString const & name, QString const & number)    : name_(name), number_(number) {  }  QString name() const {    return name_;  }  QString number() const {    return number_;  }private:  QString name_;  QString number_;};class PeopleListModel : public QAbstractListModel {  Q_OBJECTpublic:  enum PeopleRoles {    NameRole = Qt::UserRole + 1,    NumberRole  };  PeopleListModel(QObject * parent = 0)    : QAbstractListModel(parent) {    /*    People p1("Dean", "186***");    addPeople(p1);    People p2("Crystal", "186***");    addPeople(p2);*/  }  void addPeople(People const & p) {    beginInsertRows(QModelIndex(), rowCount(), rowCount());    values_ << p;    endInsertRows();  }  int rowCount(QModelIndex const & parent = QModelIndex()) const {    return values_.count();  }  QVariant data(QModelIndex const & index, int role = Qt::DisplayRole) const {    std::cout << "data()" << std::endl;    std::cout << "index row: " << index.row() << " index column: " << index.column() << std::endl;    if (index.row() < 0 || index.row() >= values_.count()) {      std::cout << "s1" << std::endl;      return QVariant();    }    People const & p = values_[index.row()];    std::cout << "role: " << role << std::endl;    if (role == NameRole) {      return p.name();    }    else if (role == NumberRole) {      return p.number();    }    return QVariant();  }  Q_INVOKABLE void reload() {    std::cout << "--------------------" << std::endl;    std::cout << "reload()" << std::endl;    beginResetModel();    values_.clear();    endResetModel();    People p1("Dean", "176***");    addPeople(p1);    People p2("Crystal", "176***");    addPeople(p2);    std::cout << "values count: " << values_.count() << std::endl;  }protected:  QHash<int, QByteArray> roleNames() const {    QHash<int, QByteArray> roles;    roles[NameRole] = "name";    roles[NumberRole] = "number";    return roles;  }private:  QList<People> values_;};class QExampleQmlPlugin : public QQmlExtensionPlugin {  Q_OBJECT  Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtension.PeopleListModel")  public:  void registerTypes(char const * uri) {    qmlRegisterType<PeopleListModel>(uri, 1, 0, "PeopleListModel");  }};#include "plugin.moc"

运行效果,刚开始什么都没有,点击后出现数据。




           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/fduffyyg/article/details/84192616