#include #include #include #include #include #include #include #include #include #include class CategoryModel : public QAbstractListModel { Q_OBJECT QVector cache{"foo", "bar"}; public: virtual int rowCount(const QModelIndex &parent) const override; virtual QVariant data(const QModelIndex &index, int role) const override; }; #include "main.moc" int CategoryModel::rowCount(const QModelIndex &) const { return cache.size(); } QVariant CategoryModel::data(const QModelIndex &index, int role) const { if (role == Qt::DisplayRole || role == Qt::EditRole) { return cache[index.row()]; } return QVariant(); } int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow widget; CategoryModel model; QSortFilterProxyModel proxy; proxy.setSourceModel(&model); QListView view; view.setModel(&proxy); view.selectionModel()->select(model.index(0), QItemSelectionModel::ClearAndSelect); QObject::connect(view.selectionModel(), &QItemSelectionModel::selectionChanged, [&model](){ qDebug() << "selection changed"; emit model.dataChanged(model.index(0), model.index(0)); qDebug() << "dataChanged"; }); QTimer::singleShot(0, [&proxy](){ proxy.setFilterFixedString("fizz"); }); widget.setCentralWidget(&view); widget.show(); return app.exec(); }