#include class PanelModel : public QAbstractListModel { Q_OBJECT public: PanelModel(QObject *parent = 0) : QAbstractListModel(parent) { m_elements << "a" << "b" << "c" << "d"; } int rowCount(const QModelIndex &parent = QModelIndex()) const { return m_elements.count(); } QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const { if (!index.isValid()) return QVariant(); if (index.row() < m_elements.count()) { if ( role == Qt::DisplayRole ) return m_elements.at( index.row() ); } return QVariant(); } public slots: void move() { m_elements[0] = "e"; m_elements[1] = "f"; m_elements[2] = "g"; m_elements[3] = "h"; emit dataChanged(index(2, 0, QModelIndex()), index(3, 0, QModelIndex())); } private: QStringList m_elements; }; #include "main.moc" int main(int argc, char *argv[]) { QApplication app(argc, argv); PanelModel aPanelModel; QWidget w; QVBoxLayout *vbox = new QVBoxLayout; QListView *lv = new QListView; QTreeView *tv = new QTreeView; QPushButton *pb = new QPushButton("Update"); vbox->addWidget(lv); vbox->addWidget(tv); vbox->addWidget(pb); lv->setModel(&aPanelModel); tv->setModel(&aPanelModel); w.setLayout(vbox); QObject::connect(pb, SIGNAL(clicked()), &aPanelModel, SLOT(move())); w.show(); return app.exec(); }