summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorMichael D Scull <ext-michael.scull@nokia.com>2010-05-27 13:12:58 (GMT)
committerDavid Boddie <dboddie@trolltech.com>2010-07-07 15:07:53 (GMT)
commitf574700f920ae5d5bda25ba217d6face9f3d3902 (patch)
treea4db1390147f7b6041ca763be6715078b1ddd9ab /examples
parent4df3fb13821e13ecf581d87f2d224b2f1b964609 (diff)
downloadQt-f574700f920ae5d5bda25ba217d6face9f3d3902.zip
Qt-f574700f920ae5d5bda25ba217d6face9f3d3902.tar.gz
Qt-f574700f920ae5d5bda25ba217d6face9f3d3902.tar.bz2
Rolands ModelView Source
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/tutorials/modelview/1_readonly/1_readonly.pro10
-rwxr-xr-xexamples/tutorials/modelview/1_readonly/main.cpp10
-rwxr-xr-xexamples/tutorials/modelview/1_readonly/modelview.cpp12
-rwxr-xr-xexamples/tutorials/modelview/1_readonly/modelview.h18
-rwxr-xr-xexamples/tutorials/modelview/1_readonly/mymodel.cpp30
-rwxr-xr-xexamples/tutorials/modelview/1_readonly/mymodel.h16
-rwxr-xr-xexamples/tutorials/modelview/2_formatting/2_formatting.pro10
-rwxr-xr-xexamples/tutorials/modelview/2_formatting/main.cpp10
-rwxr-xr-xexamples/tutorials/modelview/2_formatting/modelview.cpp12
-rwxr-xr-xexamples/tutorials/modelview/2_formatting/modelview.h17
-rwxr-xr-xexamples/tutorials/modelview/2_formatting/mymodel.cpp73
-rwxr-xr-xexamples/tutorials/modelview/2_formatting/mymodel.h16
-rwxr-xr-xexamples/tutorials/modelview/3_changingmodel/3_changingmodel.pro10
-rwxr-xr-xexamples/tutorials/modelview/3_changingmodel/main.cpp10
-rwxr-xr-xexamples/tutorials/modelview/3_changingmodel/modelview.cpp12
-rwxr-xr-xexamples/tutorials/modelview/3_changingmodel/modelview.h17
-rwxr-xr-xexamples/tutorials/modelview/3_changingmodel/mymodel.cpp53
-rwxr-xr-xexamples/tutorials/modelview/3_changingmodel/mymodel.h23
-rwxr-xr-xexamples/tutorials/modelview/4_headers/4_headers.pro10
-rwxr-xr-xexamples/tutorials/modelview/4_headers/main.cpp10
-rwxr-xr-xexamples/tutorials/modelview/4_headers/modelview.cpp14
-rwxr-xr-xexamples/tutorials/modelview/4_headers/modelview.h18
-rwxr-xr-xexamples/tutorials/modelview/4_headers/mymodel.cpp50
-rwxr-xr-xexamples/tutorials/modelview/4_headers/mymodel.h17
-rwxr-xr-xexamples/tutorials/modelview/5_edit/5_edit.pro10
-rwxr-xr-xexamples/tutorials/modelview/5_edit/main.cpp10
-rwxr-xr-xexamples/tutorials/modelview/5_edit/modelview.cpp20
-rwxr-xr-xexamples/tutorials/modelview/5_edit/modelview.h19
-rwxr-xr-xexamples/tutorials/modelview/5_edit/mymodel.cpp58
-rwxr-xr-xexamples/tutorials/modelview/5_edit/mymodel.h24
-rwxr-xr-xexamples/tutorials/modelview/6_treeview/6_treeview.pro5
-rwxr-xr-xexamples/tutorials/modelview/6_treeview/main.cpp10
-rwxr-xr-xexamples/tutorials/modelview/6_treeview/modelview.cpp40
-rwxr-xr-xexamples/tutorials/modelview/6_treeview/modelview.h24
-rwxr-xr-xexamples/tutorials/modelview/7_selections/7_selections.pro5
-rwxr-xr-xexamples/tutorials/modelview/7_selections/main.cpp10
-rwxr-xr-xexamples/tutorials/modelview/7_selections/modelview.cpp63
-rwxr-xr-xexamples/tutorials/modelview/7_selections/modelview.h23
-rwxr-xr-xexamples/tutorials/modelview/qmake.pro10
39 files changed, 809 insertions, 0 deletions
diff --git a/examples/tutorials/modelview/1_readonly/1_readonly.pro b/examples/tutorials/modelview/1_readonly/1_readonly.pro
new file mode 100755
index 0000000..1162d5a
--- /dev/null
+++ b/examples/tutorials/modelview/1_readonly/1_readonly.pro
@@ -0,0 +1,10 @@
+TARGET = mv_readonly
+
+TEMPLATE = app
+
+SOURCES += main.cpp \
+ modelview.cpp \
+ mymodel.cpp
+
+HEADERS += modelview.h \
+ mymodel.h
diff --git a/examples/tutorials/modelview/1_readonly/main.cpp b/examples/tutorials/modelview/1_readonly/main.cpp
new file mode 100755
index 0000000..998503c
--- /dev/null
+++ b/examples/tutorials/modelview/1_readonly/main.cpp
@@ -0,0 +1,10 @@
+#include <QtGui/QApplication>
+#include "modelview.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ ModelView w;
+ w.show();
+ return a.exec();
+}
diff --git a/examples/tutorials/modelview/1_readonly/modelview.cpp b/examples/tutorials/modelview/1_readonly/modelview.cpp
new file mode 100755
index 0000000..becd61d
--- /dev/null
+++ b/examples/tutorials/modelview/1_readonly/modelview.cpp
@@ -0,0 +1,12 @@
+#include <QTableView>
+#include "modelview.h"
+#include "mymodel.h"
+
+ModelView::ModelView(QWidget *parent)
+ : QMainWindow(parent)
+{
+ tableView = new QTableView(this);
+ setCentralWidget(tableView);
+ tableView->setModel(new MyModel(this) );
+}
+
diff --git a/examples/tutorials/modelview/1_readonly/modelview.h b/examples/tutorials/modelview/1_readonly/modelview.h
new file mode 100755
index 0000000..f1b63bd
--- /dev/null
+++ b/examples/tutorials/modelview/1_readonly/modelview.h
@@ -0,0 +1,18 @@
+#ifndef MODELVIEW_H
+#define MODELVIEW_H
+
+#include <QtGui/QMainWindow>
+
+class QTableView; //forward declaration
+
+class ModelView : public QMainWindow
+{
+ Q_OBJECT
+private:
+ QTableView *tableView;
+public:
+ ModelView(QWidget *parent = 0);
+
+};
+
+#endif // MODELVIEW_H
diff --git a/examples/tutorials/modelview/1_readonly/mymodel.cpp b/examples/tutorials/modelview/1_readonly/mymodel.cpp
new file mode 100755
index 0000000..ff3e2d2
--- /dev/null
+++ b/examples/tutorials/modelview/1_readonly/mymodel.cpp
@@ -0,0 +1,30 @@
+#include "mymodel.h"
+
+MyModel::MyModel(QObject *parent)
+ :QAbstractTableModel(parent)
+{
+}
+
+//-------------------------------------------------------
+int MyModel::rowCount(const QModelIndex & /*parent*/ ) const
+{
+ return 2;
+}
+
+//-------------------------------------------------------
+int MyModel::columnCount(const QModelIndex & /*parent*/ ) const
+{
+ return 3;
+}
+
+//-------------------------------------------------------
+QVariant MyModel::data(const QModelIndex &index, int role ) const
+{
+ if(role == Qt::DisplayRole)
+ {
+ return QString("Row%1, Column%2")
+ .arg(index.row() + 1)
+ .arg(index.column() +1);
+ }
+ return QVariant();
+}
diff --git a/examples/tutorials/modelview/1_readonly/mymodel.h b/examples/tutorials/modelview/1_readonly/mymodel.h
new file mode 100755
index 0000000..01ae6cb
--- /dev/null
+++ b/examples/tutorials/modelview/1_readonly/mymodel.h
@@ -0,0 +1,16 @@
+#ifndef MYMODEL_H
+#define MYMODEL_H
+
+#include <QAbstractTableModel>
+
+class MyModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ MyModel(QObject *parent);
+ int rowCount(const QModelIndex &parent = QModelIndex()) const ;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+};
+
+#endif // MYMODEL_H
diff --git a/examples/tutorials/modelview/2_formatting/2_formatting.pro b/examples/tutorials/modelview/2_formatting/2_formatting.pro
new file mode 100755
index 0000000..7e70d81
--- /dev/null
+++ b/examples/tutorials/modelview/2_formatting/2_formatting.pro
@@ -0,0 +1,10 @@
+TARGET = mv_formatting
+
+TEMPLATE = app
+
+SOURCES += main.cpp \
+ modelview.cpp \
+ mymodel.cpp
+
+HEADERS += modelview.h \
+ mymodel.h
diff --git a/examples/tutorials/modelview/2_formatting/main.cpp b/examples/tutorials/modelview/2_formatting/main.cpp
new file mode 100755
index 0000000..998503c
--- /dev/null
+++ b/examples/tutorials/modelview/2_formatting/main.cpp
@@ -0,0 +1,10 @@
+#include <QtGui/QApplication>
+#include "modelview.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ ModelView w;
+ w.show();
+ return a.exec();
+}
diff --git a/examples/tutorials/modelview/2_formatting/modelview.cpp b/examples/tutorials/modelview/2_formatting/modelview.cpp
new file mode 100755
index 0000000..becd61d
--- /dev/null
+++ b/examples/tutorials/modelview/2_formatting/modelview.cpp
@@ -0,0 +1,12 @@
+#include <QTableView>
+#include "modelview.h"
+#include "mymodel.h"
+
+ModelView::ModelView(QWidget *parent)
+ : QMainWindow(parent)
+{
+ tableView = new QTableView(this);
+ setCentralWidget(tableView);
+ tableView->setModel(new MyModel(this) );
+}
+
diff --git a/examples/tutorials/modelview/2_formatting/modelview.h b/examples/tutorials/modelview/2_formatting/modelview.h
new file mode 100755
index 0000000..98bee38
--- /dev/null
+++ b/examples/tutorials/modelview/2_formatting/modelview.h
@@ -0,0 +1,17 @@
+#ifndef MODELVIEW_H
+#define MODELVIEW_H
+
+#include <QtGui/QMainWindow>
+
+class QTableView; //forward declaration
+
+class ModelView : public QMainWindow
+{
+ Q_OBJECT
+private:
+ QTableView *tableView;
+public:
+ ModelView(QWidget *parent = 0);
+};
+
+#endif // MODELVIEW_H
diff --git a/examples/tutorials/modelview/2_formatting/mymodel.cpp b/examples/tutorials/modelview/2_formatting/mymodel.cpp
new file mode 100755
index 0000000..48b1134
--- /dev/null
+++ b/examples/tutorials/modelview/2_formatting/mymodel.cpp
@@ -0,0 +1,73 @@
+#include <QFont>
+#include <QBrush>
+#include "mymodel.h"
+#include <QDebug>
+
+MyModel::MyModel(QObject *parent)
+ :QAbstractTableModel(parent)
+{
+}
+
+//-------------------------------------------------------
+int MyModel::rowCount(const QModelIndex & /*parent */ ) const
+{
+ return 2;
+}
+
+//-------------------------------------------------------
+int MyModel::columnCount(const QModelIndex & /*parent */ ) const
+{
+ return 3;
+}
+
+//-------------------------------------------------------
+QVariant MyModel::data(const QModelIndex &index, int role ) const
+{
+ int row = index.row();
+ int col = index.column();
+ // generate a log message when this method gets called
+ qDebug() << QString("row %1, col%2, role %3")
+ .arg(row).arg(col).arg(role);
+
+ switch(role){
+ case Qt::DisplayRole:
+ if(row == 0 && col == 1 )return QString("<--left");
+ if(row == 1 && col == 1 )return QString("right-->");
+
+ return QString("Row%1, Column%2")
+ .arg(row + 1)
+ .arg(col +1);
+ break;
+ case Qt::FontRole:
+ if(row == 0 && col ==0 ) //change font only for cell(0,0)
+ {
+ QFont boldFont;
+ boldFont.setBold(true);
+ return boldFont;
+ }
+ break;
+ case Qt::BackgroundRole:
+
+ if(row == 1 && col ==2 ) //change background only for cell(1,2)
+ {
+ QBrush redBackground(QColor(Qt::red));
+ return redBackground;
+ }
+ break;
+ case Qt::TextAlignmentRole:
+
+ if(row == 1 && col ==1 ) //change text alignment only for cell(1,1)
+ {
+ return Qt::AlignRight + Qt::AlignVCenter;
+ }
+ break;
+ case Qt::CheckStateRole:
+
+ if(row == 1 && col ==0 ) //add a checkbox to cell(1,0)
+ {
+ return Qt::Checked;
+ }
+ }
+ return QVariant();
+}
+
diff --git a/examples/tutorials/modelview/2_formatting/mymodel.h b/examples/tutorials/modelview/2_formatting/mymodel.h
new file mode 100755
index 0000000..01ae6cb
--- /dev/null
+++ b/examples/tutorials/modelview/2_formatting/mymodel.h
@@ -0,0 +1,16 @@
+#ifndef MYMODEL_H
+#define MYMODEL_H
+
+#include <QAbstractTableModel>
+
+class MyModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ MyModel(QObject *parent);
+ int rowCount(const QModelIndex &parent = QModelIndex()) const ;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+};
+
+#endif // MYMODEL_H
diff --git a/examples/tutorials/modelview/3_changingmodel/3_changingmodel.pro b/examples/tutorials/modelview/3_changingmodel/3_changingmodel.pro
new file mode 100755
index 0000000..d61ee4c
--- /dev/null
+++ b/examples/tutorials/modelview/3_changingmodel/3_changingmodel.pro
@@ -0,0 +1,10 @@
+TARGET = mv_changingmodel
+
+TEMPLATE = app
+
+SOURCES += main.cpp \
+ modelview.cpp \
+ mymodel.cpp
+
+HEADERS += modelview.h \
+ mymodel.h
diff --git a/examples/tutorials/modelview/3_changingmodel/main.cpp b/examples/tutorials/modelview/3_changingmodel/main.cpp
new file mode 100755
index 0000000..998503c
--- /dev/null
+++ b/examples/tutorials/modelview/3_changingmodel/main.cpp
@@ -0,0 +1,10 @@
+#include <QtGui/QApplication>
+#include "modelview.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ ModelView w;
+ w.show();
+ return a.exec();
+}
diff --git a/examples/tutorials/modelview/3_changingmodel/modelview.cpp b/examples/tutorials/modelview/3_changingmodel/modelview.cpp
new file mode 100755
index 0000000..becd61d
--- /dev/null
+++ b/examples/tutorials/modelview/3_changingmodel/modelview.cpp
@@ -0,0 +1,12 @@
+#include <QTableView>
+#include "modelview.h"
+#include "mymodel.h"
+
+ModelView::ModelView(QWidget *parent)
+ : QMainWindow(parent)
+{
+ tableView = new QTableView(this);
+ setCentralWidget(tableView);
+ tableView->setModel(new MyModel(this) );
+}
+
diff --git a/examples/tutorials/modelview/3_changingmodel/modelview.h b/examples/tutorials/modelview/3_changingmodel/modelview.h
new file mode 100755
index 0000000..98bee38
--- /dev/null
+++ b/examples/tutorials/modelview/3_changingmodel/modelview.h
@@ -0,0 +1,17 @@
+#ifndef MODELVIEW_H
+#define MODELVIEW_H
+
+#include <QtGui/QMainWindow>
+
+class QTableView; //forward declaration
+
+class ModelView : public QMainWindow
+{
+ Q_OBJECT
+private:
+ QTableView *tableView;
+public:
+ ModelView(QWidget *parent = 0);
+};
+
+#endif // MODELVIEW_H
diff --git a/examples/tutorials/modelview/3_changingmodel/mymodel.cpp b/examples/tutorials/modelview/3_changingmodel/mymodel.cpp
new file mode 100755
index 0000000..d594175
--- /dev/null
+++ b/examples/tutorials/modelview/3_changingmodel/mymodel.cpp
@@ -0,0 +1,53 @@
+#include <QTimer>
+#include <QTime>
+#include <QBrush>
+#include "mymodel.h"
+
+
+MyModel::MyModel(QObject *parent)
+ :QAbstractTableModel(parent)
+{
+// selectedCell = 0;
+ timer = new QTimer(this);
+ timer->setInterval(1000);
+ connect(timer, SIGNAL(timeout()) , this, SLOT(timerHit()) );
+ timer->start();
+}
+
+//-------------------------------------------------------
+int MyModel::rowCount(const QModelIndex & /*parent */ ) const
+{
+ return 2;
+}
+
+//-------------------------------------------------------
+int MyModel::columnCount(const QModelIndex & /*parent */ ) const
+{
+ return 3;
+}
+
+//-------------------------------------------------------
+QVariant MyModel::data(const QModelIndex &index, int role ) const
+{
+ int row = index.row();
+ int col = index.column();
+
+ if(role == Qt::DisplayRole)
+ {
+ if(row == 0 && col == 0 )
+ {
+ return QTime::currentTime().toString();
+ }
+ }
+ return QVariant();
+}
+
+//-------------------------------------------------------
+void MyModel::timerHit()
+{
+ //we identify the top left cell
+ QModelIndex topLeft = createIndex ( 0,0 );
+ //emit a signal to make the view reread identified data
+ emit dataChanged ( topLeft, topLeft );
+}
+
diff --git a/examples/tutorials/modelview/3_changingmodel/mymodel.h b/examples/tutorials/modelview/3_changingmodel/mymodel.h
new file mode 100755
index 0000000..9cc023b
--- /dev/null
+++ b/examples/tutorials/modelview/3_changingmodel/mymodel.h
@@ -0,0 +1,23 @@
+#ifndef MYMODEL_H
+#define MYMODEL_H
+
+#include <QAbstractTableModel>
+
+class QTimer; // forward declaration
+
+class MyModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ MyModel(QObject *parent);
+ int rowCount(const QModelIndex &parent = QModelIndex()) const ;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ QTimer *timer;
+private:
+ int selectedCell;
+private slots:
+ void timerHit();
+};
+
+#endif // MYMODEL_H
diff --git a/examples/tutorials/modelview/4_headers/4_headers.pro b/examples/tutorials/modelview/4_headers/4_headers.pro
new file mode 100755
index 0000000..d6f8d23
--- /dev/null
+++ b/examples/tutorials/modelview/4_headers/4_headers.pro
@@ -0,0 +1,10 @@
+TARGET = mv_headers
+
+TEMPLATE = app
+
+SOURCES += main.cpp \
+ modelview.cpp \
+ mymodel.cpp
+
+HEADERS += modelview.h \
+ mymodel.h
diff --git a/examples/tutorials/modelview/4_headers/main.cpp b/examples/tutorials/modelview/4_headers/main.cpp
new file mode 100755
index 0000000..998503c
--- /dev/null
+++ b/examples/tutorials/modelview/4_headers/main.cpp
@@ -0,0 +1,10 @@
+#include <QtGui/QApplication>
+#include "modelview.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ ModelView w;
+ w.show();
+ return a.exec();
+}
diff --git a/examples/tutorials/modelview/4_headers/modelview.cpp b/examples/tutorials/modelview/4_headers/modelview.cpp
new file mode 100755
index 0000000..39394da
--- /dev/null
+++ b/examples/tutorials/modelview/4_headers/modelview.cpp
@@ -0,0 +1,14 @@
+#include <QTableView>
+#include <QHeaderView>
+#include "modelview.h"
+#include "mymodel.h"
+
+ModelView::ModelView(QWidget *parent)
+ : QMainWindow(parent)
+{
+ tableView = new QTableView(this);
+ setCentralWidget(tableView);
+ tableView->setModel(new MyModel(this) );
+ tableView->verticalHeader()->hide();
+}
+
diff --git a/examples/tutorials/modelview/4_headers/modelview.h b/examples/tutorials/modelview/4_headers/modelview.h
new file mode 100755
index 0000000..f1b63bd
--- /dev/null
+++ b/examples/tutorials/modelview/4_headers/modelview.h
@@ -0,0 +1,18 @@
+#ifndef MODELVIEW_H
+#define MODELVIEW_H
+
+#include <QtGui/QMainWindow>
+
+class QTableView; //forward declaration
+
+class ModelView : public QMainWindow
+{
+ Q_OBJECT
+private:
+ QTableView *tableView;
+public:
+ ModelView(QWidget *parent = 0);
+
+};
+
+#endif // MODELVIEW_H
diff --git a/examples/tutorials/modelview/4_headers/mymodel.cpp b/examples/tutorials/modelview/4_headers/mymodel.cpp
new file mode 100755
index 0000000..a032fe5
--- /dev/null
+++ b/examples/tutorials/modelview/4_headers/mymodel.cpp
@@ -0,0 +1,50 @@
+#include "mymodel.h"
+
+MyModel::MyModel(QObject *parent)
+ :QAbstractTableModel(parent)
+{
+}
+
+//-------------------------------------------------------
+int MyModel::rowCount(const QModelIndex & /*parent*/ ) const
+{
+ return 2;
+}
+
+//-------------------------------------------------------
+int MyModel::columnCount(const QModelIndex & /*parent*/ ) const
+{
+ return 3;
+}
+
+//-------------------------------------------------------
+QVariant MyModel::data(const QModelIndex &index, int role ) const
+{
+ if(role == Qt::DisplayRole)
+ {
+ return QString("Row%1, Column%2")
+ .arg(index.row() + 1)
+ .arg(index.column() +1);
+ }
+ return QVariant();
+}
+
+
+QVariant MyModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ if (role == Qt::DisplayRole)
+ {
+ if (orientation == Qt::Horizontal) {
+ switch (section)
+ {
+ case 0:
+ return QString("first");
+ case 1:
+ return QString("second");
+ case 2:
+ return QString("third");
+ }
+ }
+ }
+ return QVariant();
+}
diff --git a/examples/tutorials/modelview/4_headers/mymodel.h b/examples/tutorials/modelview/4_headers/mymodel.h
new file mode 100755
index 0000000..327ca10
--- /dev/null
+++ b/examples/tutorials/modelview/4_headers/mymodel.h
@@ -0,0 +1,17 @@
+#ifndef MYMODEL_H
+#define MYMODEL_H
+
+#include <QAbstractTableModel>
+
+class MyModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ MyModel(QObject *parent);
+ int rowCount(const QModelIndex &parent = QModelIndex()) const ;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+};
+
+#endif // MYMODEL_H
diff --git a/examples/tutorials/modelview/5_edit/5_edit.pro b/examples/tutorials/modelview/5_edit/5_edit.pro
new file mode 100755
index 0000000..e18c596
--- /dev/null
+++ b/examples/tutorials/modelview/5_edit/5_edit.pro
@@ -0,0 +1,10 @@
+TARGET = mv_edit
+
+TEMPLATE = app
+
+SOURCES += main.cpp \
+ modelview.cpp \
+ mymodel.cpp
+
+HEADERS += modelview.h \
+ mymodel.h
diff --git a/examples/tutorials/modelview/5_edit/main.cpp b/examples/tutorials/modelview/5_edit/main.cpp
new file mode 100755
index 0000000..998503c
--- /dev/null
+++ b/examples/tutorials/modelview/5_edit/main.cpp
@@ -0,0 +1,10 @@
+#include <QtGui/QApplication>
+#include "modelview.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ ModelView w;
+ w.show();
+ return a.exec();
+}
diff --git a/examples/tutorials/modelview/5_edit/modelview.cpp b/examples/tutorials/modelview/5_edit/modelview.cpp
new file mode 100755
index 0000000..b6e8e34
--- /dev/null
+++ b/examples/tutorials/modelview/5_edit/modelview.cpp
@@ -0,0 +1,20 @@
+#include <QTableView>
+#include "modelview.h"
+#include "mymodel.h"
+
+ModelView::ModelView(QWidget *parent)
+ : QMainWindow(parent)
+{
+ tableView = new QTableView(this);
+ setCentralWidget(tableView);
+ QAbstractTableModel *myModel = new MyModel(this);
+ tableView->setModel( myModel );
+
+ //transfer changes to the model to the window title
+ connect(myModel, SIGNAL(editCompleted(const QString &) ), this, SLOT(setWindowTitle(const QString &)));
+}
+
+void ModelView::showWindowTitle(const QString & title)
+{
+setWindowTitle( title );
+}
diff --git a/examples/tutorials/modelview/5_edit/modelview.h b/examples/tutorials/modelview/5_edit/modelview.h
new file mode 100755
index 0000000..e1591f9
--- /dev/null
+++ b/examples/tutorials/modelview/5_edit/modelview.h
@@ -0,0 +1,19 @@
+#ifndef MODELVIEW_H
+#define MODELVIEW_H
+
+#include <QtGui/QMainWindow>
+
+class QTableView; //forward declaration
+
+class ModelView : public QMainWindow
+{
+ Q_OBJECT
+private:
+ QTableView *tableView;
+public:
+ ModelView(QWidget *parent = 0);
+public slots:
+ void showWindowTitle(const QString & title);
+};
+
+#endif // MODELVIEW_H
diff --git a/examples/tutorials/modelview/5_edit/mymodel.cpp b/examples/tutorials/modelview/5_edit/mymodel.cpp
new file mode 100755
index 0000000..c64a6b7
--- /dev/null
+++ b/examples/tutorials/modelview/5_edit/mymodel.cpp
@@ -0,0 +1,58 @@
+#include "mymodel.h"
+
+const int COLS= 3;
+const int ROWS= 2;
+
+MyModel::MyModel(QObject *parent)
+ :QAbstractTableModel(parent)
+{
+ //gridData needs to have 6 element, one for each table cell
+ m_gridData << "1/1" << "1/2" << "1/3" << "2/1" << "2/2" << "2/3" ;
+}
+
+//-------------------------------------------------------
+int MyModel::rowCount(const QModelIndex & /*parent*/ ) const
+{
+ return ROWS;
+}
+
+//-------------------------------------------------------
+int MyModel::columnCount(const QModelIndex & /*parent*/ ) const
+{
+ return COLS;
+}
+
+//-------------------------------------------------------
+QVariant MyModel::data(const QModelIndex &index, int role ) const
+{
+ if(role == Qt::DisplayRole)
+ {
+ return m_gridData[modelIndexToOffset(index)];
+ }
+ return QVariant();
+}
+
+//-----------------------------------------------------------------
+bool MyModel::setData ( const QModelIndex & index, const QVariant & value, int role )
+{
+ if(role == Qt::EditRole)
+ {
+ m_gridData[modelIndexToOffset(index)] = value.toString();
+ emit editCompleted(m_gridData.join(" | ") );
+ }
+ return true;
+}
+
+//-----------------------------------------------------------------
+Qt::ItemFlags MyModel::flags ( const QModelIndex & /*index*/ ) const
+{
+ return Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled ;
+}
+
+//-----------------------------------------------------------------
+//convert row and column information to array offset
+int MyModel::modelIndexToOffset(const QModelIndex & index) const
+{
+ return index.row()*COLS + index.column();
+}
+
diff --git a/examples/tutorials/modelview/5_edit/mymodel.h b/examples/tutorials/modelview/5_edit/mymodel.h
new file mode 100755
index 0000000..f8fac77
--- /dev/null
+++ b/examples/tutorials/modelview/5_edit/mymodel.h
@@ -0,0 +1,24 @@
+#ifndef MYMODEL_H
+#define MYMODEL_H
+
+#include <QAbstractTableModel>
+#include <QStringList>
+
+class MyModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ MyModel(QObject *parent);
+ int rowCount(const QModelIndex &parent = QModelIndex()) const ;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole );
+ Qt::ItemFlags flags ( const QModelIndex & index ) const ;
+private:
+ QStringList m_gridData; //holds text entered into QTableView
+ int modelIndexToOffset(const QModelIndex & index) const;
+signals:
+ void editCompleted(const QString &);
+};
+
+#endif // MYMODEL_H
diff --git a/examples/tutorials/modelview/6_treeview/6_treeview.pro b/examples/tutorials/modelview/6_treeview/6_treeview.pro
new file mode 100755
index 0000000..6d078be
--- /dev/null
+++ b/examples/tutorials/modelview/6_treeview/6_treeview.pro
@@ -0,0 +1,5 @@
+TARGET = mv_tree
+TEMPLATE = app
+SOURCES += main.cpp \
+ modelview.cpp
+HEADERS += modelview.h
diff --git a/examples/tutorials/modelview/6_treeview/main.cpp b/examples/tutorials/modelview/6_treeview/main.cpp
new file mode 100755
index 0000000..998503c
--- /dev/null
+++ b/examples/tutorials/modelview/6_treeview/main.cpp
@@ -0,0 +1,10 @@
+#include <QtGui/QApplication>
+#include "modelview.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ ModelView w;
+ w.show();
+ return a.exec();
+}
diff --git a/examples/tutorials/modelview/6_treeview/modelview.cpp b/examples/tutorials/modelview/6_treeview/modelview.cpp
new file mode 100755
index 0000000..a5488f7
--- /dev/null
+++ b/examples/tutorials/modelview/6_treeview/modelview.cpp
@@ -0,0 +1,40 @@
+#include <QTreeView>
+#include <QStandardItemModel>
+#include <QStandardItem>
+#include "modelview.h"
+
+
+const int ROWS = 2;
+const int COLUMNS = 3;
+
+ModelView::ModelView(QWidget *parent)
+ : QMainWindow(parent)
+{
+ treeView = new QTreeView(this);
+ setCentralWidget(treeView);
+ standardModel = new QStandardItemModel ;
+
+ QList<QStandardItem *> preparedColumn =prepareColumn("first", "second", "third");
+ QStandardItem *item = standardModel->invisibleRootItem();
+ // adding a row to the invisible root item produces a root element
+ item->appendRow(preparedColumn);
+
+ QList<QStandardItem *> secondRow =prepareColumn("111", "222", "333");
+ // adding a row to an item starts a subtree
+ preparedColumn.first()->appendRow(secondRow);
+
+ treeView->setModel( standardModel );
+ treeView->expandAll();
+}
+
+//---------------------------------------------------------------------------
+QList<QStandardItem *> ModelView::prepareColumn(const QString &first,
+ const QString &second,
+ const QString &third )
+{
+ QList<QStandardItem *> colItems;
+ colItems << new QStandardItem(first);
+ colItems << new QStandardItem(second);
+ colItems << new QStandardItem(third);
+ return colItems;
+}
diff --git a/examples/tutorials/modelview/6_treeview/modelview.h b/examples/tutorials/modelview/6_treeview/modelview.h
new file mode 100755
index 0000000..1ab23ea
--- /dev/null
+++ b/examples/tutorials/modelview/6_treeview/modelview.h
@@ -0,0 +1,24 @@
+#ifndef MODELVIEW_H
+#define MODELVIEW_H
+
+#include <QtGui/QMainWindow>
+
+class QTreeView; //forward declaration
+class QStandardItemModel;
+class QStandardItem;
+
+
+class ModelView : public QMainWindow
+{
+ Q_OBJECT
+private:
+ QTreeView *treeView;
+ QStandardItemModel *standardModel;
+ QList<QStandardItem *> prepareColumn(const QString &first,
+ const QString &second,
+ const QString &third );
+public:
+ ModelView(QWidget *parent = 0);
+};
+
+#endif // MODELVIEW_H
diff --git a/examples/tutorials/modelview/7_selections/7_selections.pro b/examples/tutorials/modelview/7_selections/7_selections.pro
new file mode 100755
index 0000000..952641c6
--- /dev/null
+++ b/examples/tutorials/modelview/7_selections/7_selections.pro
@@ -0,0 +1,5 @@
+TARGET = mv_selections
+TEMPLATE = app
+SOURCES += main.cpp \
+ modelview.cpp
+HEADERS += modelview.h
diff --git a/examples/tutorials/modelview/7_selections/main.cpp b/examples/tutorials/modelview/7_selections/main.cpp
new file mode 100755
index 0000000..998503c
--- /dev/null
+++ b/examples/tutorials/modelview/7_selections/main.cpp
@@ -0,0 +1,10 @@
+#include <QtGui/QApplication>
+#include "modelview.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ ModelView w;
+ w.show();
+ return a.exec();
+}
diff --git a/examples/tutorials/modelview/7_selections/modelview.cpp b/examples/tutorials/modelview/7_selections/modelview.cpp
new file mode 100755
index 0000000..49c5bb8
--- /dev/null
+++ b/examples/tutorials/modelview/7_selections/modelview.cpp
@@ -0,0 +1,63 @@
+#include <QTreeView>
+#include <QStandardItemModel>
+#include <QItemSelectionModel>
+#include "modelview.h"
+
+ModelView::ModelView(QWidget *parent)
+ : QMainWindow(parent)
+{
+ treeView = new QTreeView(this);
+ setCentralWidget(treeView);
+ standardModel = new QStandardItemModel ;
+ QStandardItem *rootNode = standardModel->invisibleRootItem();
+
+
+ //defining a couple of items
+ QStandardItem *americaItem = new QStandardItem("America");
+ QStandardItem *mexicoItem = new QStandardItem("Canada");
+ QStandardItem *usaItem = new QStandardItem("USA");
+ QStandardItem *bostonItem = new QStandardItem("Boston");
+ QStandardItem *europeItem = new QStandardItem("Europe");
+ QStandardItem *italyItem = new QStandardItem("Italy");
+ QStandardItem *romeItem = new QStandardItem("Rome");
+ QStandardItem *veronaItem = new QStandardItem("Verona");
+
+ //building up the hierarchy
+ rootNode-> appendRow(americaItem);
+ rootNode-> appendRow(europeItem);
+ americaItem-> appendRow(mexicoItem);
+ americaItem-> appendRow(usaItem);
+ usaItem-> appendRow(bostonItem);
+ europeItem-> appendRow(italyItem);
+ italyItem-> appendRow(romeItem);
+ italyItem-> appendRow(veronaItem);
+
+ //register the model
+ treeView->setModel( standardModel );
+ treeView->expandAll();
+
+ //selection changes shall trigger a slot
+ QItemSelectionModel *selectionModel= treeView->selectionModel();
+ connect(selectionModel, SIGNAL(selectionChanged ( const QItemSelection & , const QItemSelection & )),
+ this, SLOT(selectionChangedSlot(const QItemSelection & , const QItemSelection & )));
+}
+
+//------------------------------------------------------------------------------------
+void ModelView::selectionChangedSlot(const QItemSelection & /*newSelection*/, const QItemSelection & /*oldSelection*/)
+{
+ const QModelIndex index = treeView->selectionModel()->currentIndex();
+ QString selectedText = index.data(Qt::DisplayRole).toString();
+ int hierarchyLevel=1;
+ QModelIndex seekRoot = index;
+ while(seekRoot.parent() != QModelIndex() )
+ {
+ seekRoot = seekRoot.parent();
+ hierarchyLevel++;
+ }
+ QString showString = QString("%1, Level %2").arg(selectedText)
+ .arg(hierarchyLevel);
+ setWindowTitle(showString);
+}
+
+
+
diff --git a/examples/tutorials/modelview/7_selections/modelview.h b/examples/tutorials/modelview/7_selections/modelview.h
new file mode 100755
index 0000000..0e638a9
--- /dev/null
+++ b/examples/tutorials/modelview/7_selections/modelview.h
@@ -0,0 +1,23 @@
+#ifndef MODELVIEW_H
+#define MODELVIEW_H
+
+#include <QtGui/QMainWindow>
+
+class QTreeView; //forward declaration
+class QStandardItemModel;
+class QItemSelection;
+
+
+class ModelView : public QMainWindow
+{
+ Q_OBJECT
+private:
+ QTreeView *treeView;
+ QStandardItemModel *standardModel;
+private slots:
+ void selectionChangedSlot(const QItemSelection & newSelection, const QItemSelection & oldSelection);
+public:
+ ModelView(QWidget *parent = 0);
+};
+
+#endif // MODELVIEW_H
diff --git a/examples/tutorials/modelview/qmake.pro b/examples/tutorials/modelview/qmake.pro
new file mode 100755
index 0000000..7f684ba
--- /dev/null
+++ b/examples/tutorials/modelview/qmake.pro
@@ -0,0 +1,10 @@
+TEMPLATE = subdirs
+
+SUBDIRS = 1_readonly \
+ 2_formatting \
+ 3_changingmodel \
+ 4_headers \
+ 5_edit \
+ 6_treeview \
+ 7_selections
+