#include #include #include #include #include #include #include class TestModel : public QAbstractListModel { Q_OBJECT public: TestModel(QObject* parent = NULL) : QAbstractListModel(parent) { Data << 1 << 2 << 3; } virtual ~TestModel() { } int rowCount (const QModelIndex & parent = QModelIndex() ) const { return Data.count(); } QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const { if(role == Qt::DisplayRole && index.row() >= 0 && index.row() < rowCount()) return QString::number(Data.at(index.row())); else return QVariant(); } public slots: void moveUp() { QModelIndex tmpIndex = index(0); beginMoveRows(tmpIndex.parent(), 0, 0, tmpIndex.parent(), 1); Data.move(0,1); endMoveRows(); } protected: QList Data; }; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0) : QMainWindow(parent), Model(new TestModel(this)) { QWidget* centralWidget = new QWidget(this); centralWidget->setObjectName(QString::fromUtf8("centralWidget")); QVBoxLayout* verticalLayout = new QVBoxLayout(centralWidget); verticalLayout->setSpacing(6); verticalLayout->setContentsMargins(11, 11, 11, 11); verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); QListView* listView = new QListView(centralWidget); listView->setObjectName(QString::fromUtf8("listView")); verticalLayout->addWidget(listView); QPushButton* Button = new QPushButton("Click", centralWidget); verticalLayout->addWidget(Button); setCentralWidget(centralWidget); connect(Button, SIGNAL(clicked()), Model, SLOT(moveUp())); listView->setModel(Model); } virtual ~MainWindow() { } protected: TestModel* Model; }; int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }