Suche senden
Hochladen
Practical Model View Programming
•
4 gefällt mir
•
2,194 views
M
Marius Bugge Monsen
Folgen
Melden
Teilen
Melden
Teilen
1 von 43
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Practical Model View Programming (Roadshow Version)
Practical Model View Programming (Roadshow Version)
Marius Bugge Monsen
Qt Item Views In Depth
Qt Item Views In Depth
Marius Bugge Monsen
Qt Widget In-Depth
Qt Widget In-Depth
account inactive
The Next Generation Qt Item Views
The Next Generation Qt Item Views
account inactive
The Future of Qt Widgets
The Future of Qt Widgets
Marius Bugge Monsen
Best Practices in Qt Quick/QML - Part IV
Best Practices in Qt Quick/QML - Part IV
ICS
CodeMash - Building Rich Apps with Groovy SwingBuilder
CodeMash - Building Rich Apps with Groovy SwingBuilder
Andres Almiray
Qt Graphics View Framework (Qt Developers Meetup Isreal)
Qt Graphics View Framework (Qt Developers Meetup Isreal)
vitalipe
Empfohlen
Practical Model View Programming (Roadshow Version)
Practical Model View Programming (Roadshow Version)
Marius Bugge Monsen
Qt Item Views In Depth
Qt Item Views In Depth
Marius Bugge Monsen
Qt Widget In-Depth
Qt Widget In-Depth
account inactive
The Next Generation Qt Item Views
The Next Generation Qt Item Views
account inactive
The Future of Qt Widgets
The Future of Qt Widgets
Marius Bugge Monsen
Best Practices in Qt Quick/QML - Part IV
Best Practices in Qt Quick/QML - Part IV
ICS
CodeMash - Building Rich Apps with Groovy SwingBuilder
CodeMash - Building Rich Apps with Groovy SwingBuilder
Andres Almiray
Qt Graphics View Framework (Qt Developers Meetup Isreal)
Qt Graphics View Framework (Qt Developers Meetup Isreal)
vitalipe
QVariant, QObject — Qt's not just for GUI development
QVariant, QObject — Qt's not just for GUI development
ICS
Qt Animation
Qt Animation
William Lee
Oops lab manual2
Oops lab manual2
Mouna Guru
05 - Qt External Interaction and Graphics
05 - Qt External Interaction and Graphics
Andreas Jakl
Best Practices in Qt Quick/QML - Part II
Best Practices in Qt Quick/QML - Part II
ICS
Svcc Building Rich Applications with Groovy's SwingBuilder
Svcc Building Rich Applications with Groovy's SwingBuilder
Andres Almiray
Svcc Java2D And Groovy
Svcc Java2D And Groovy
Andres Almiray
Svcc Groovy Testing
Svcc Groovy Testing
Andres Almiray
Java Script Workshop
Java Script Workshop
Dmitry Baranovskiy
Recoil at Codete Webinars #3
Recoil at Codete Webinars #3
Mateusz Bryła
Treinamento Qt básico - aula III
Treinamento Qt básico - aula III
Marcelo Barros de Almeida
Best Practices in Qt Quick/QML - Part III
Best Practices in Qt Quick/QML - Part III
ICS
Qt Memory Management & Signal and Slots
Qt Memory Management & Signal and Slots
Jussi Pohjolainen
ADG Poznań - Kotlin for Android developers
ADG Poznań - Kotlin for Android developers
Bartosz Kosarzycki
OpenVG 1.1 Reference Card
OpenVG 1.1 Reference Card
The Khronos Group Inc.
Promise: async programming hero
Promise: async programming hero
The Software House
Improving Correctness With Type - Goto Con Berlin
Improving Correctness With Type - Goto Con Berlin
Iain Hull
Home Improvement: Architecture & Kotlin
Home Improvement: Architecture & Kotlin
Jorge Ortiz
Let the type system be your friend
Let the type system be your friend
The Software House
Composite Pattern
Composite Pattern
Somenath Mukhopadhyay
IPC with Qt
IPC with Qt
Marius Bugge Monsen
Scripting Your Qt Application
Scripting Your Qt Application
account inactive
Weitere ähnliche Inhalte
Was ist angesagt?
QVariant, QObject — Qt's not just for GUI development
QVariant, QObject — Qt's not just for GUI development
ICS
Qt Animation
Qt Animation
William Lee
Oops lab manual2
Oops lab manual2
Mouna Guru
05 - Qt External Interaction and Graphics
05 - Qt External Interaction and Graphics
Andreas Jakl
Best Practices in Qt Quick/QML - Part II
Best Practices in Qt Quick/QML - Part II
ICS
Svcc Building Rich Applications with Groovy's SwingBuilder
Svcc Building Rich Applications with Groovy's SwingBuilder
Andres Almiray
Svcc Java2D And Groovy
Svcc Java2D And Groovy
Andres Almiray
Svcc Groovy Testing
Svcc Groovy Testing
Andres Almiray
Java Script Workshop
Java Script Workshop
Dmitry Baranovskiy
Recoil at Codete Webinars #3
Recoil at Codete Webinars #3
Mateusz Bryła
Treinamento Qt básico - aula III
Treinamento Qt básico - aula III
Marcelo Barros de Almeida
Best Practices in Qt Quick/QML - Part III
Best Practices in Qt Quick/QML - Part III
ICS
Qt Memory Management & Signal and Slots
Qt Memory Management & Signal and Slots
Jussi Pohjolainen
ADG Poznań - Kotlin for Android developers
ADG Poznań - Kotlin for Android developers
Bartosz Kosarzycki
OpenVG 1.1 Reference Card
OpenVG 1.1 Reference Card
The Khronos Group Inc.
Promise: async programming hero
Promise: async programming hero
The Software House
Improving Correctness With Type - Goto Con Berlin
Improving Correctness With Type - Goto Con Berlin
Iain Hull
Home Improvement: Architecture & Kotlin
Home Improvement: Architecture & Kotlin
Jorge Ortiz
Let the type system be your friend
Let the type system be your friend
The Software House
Composite Pattern
Composite Pattern
Somenath Mukhopadhyay
Was ist angesagt?
(20)
QVariant, QObject — Qt's not just for GUI development
QVariant, QObject — Qt's not just for GUI development
Qt Animation
Qt Animation
Oops lab manual2
Oops lab manual2
05 - Qt External Interaction and Graphics
05 - Qt External Interaction and Graphics
Best Practices in Qt Quick/QML - Part II
Best Practices in Qt Quick/QML - Part II
Svcc Building Rich Applications with Groovy's SwingBuilder
Svcc Building Rich Applications with Groovy's SwingBuilder
Svcc Java2D And Groovy
Svcc Java2D And Groovy
Svcc Groovy Testing
Svcc Groovy Testing
Java Script Workshop
Java Script Workshop
Recoil at Codete Webinars #3
Recoil at Codete Webinars #3
Treinamento Qt básico - aula III
Treinamento Qt básico - aula III
Best Practices in Qt Quick/QML - Part III
Best Practices in Qt Quick/QML - Part III
Qt Memory Management & Signal and Slots
Qt Memory Management & Signal and Slots
ADG Poznań - Kotlin for Android developers
ADG Poznań - Kotlin for Android developers
OpenVG 1.1 Reference Card
OpenVG 1.1 Reference Card
Promise: async programming hero
Promise: async programming hero
Improving Correctness With Type - Goto Con Berlin
Improving Correctness With Type - Goto Con Berlin
Home Improvement: Architecture & Kotlin
Home Improvement: Architecture & Kotlin
Let the type system be your friend
Let the type system be your friend
Composite Pattern
Composite Pattern
Andere mochten auch
IPC with Qt
IPC with Qt
Marius Bugge Monsen
Scripting Your Qt Application
Scripting Your Qt Application
account inactive
Qt 5 - C++ and Widgets
Qt 5 - C++ and Widgets
Juha Peltomäki
Python Tricks That You Can't Live Without
Python Tricks That You Can't Live Without
Audrey Roy
Object-oriented Programming in Python
Object-oriented Programming in Python
Juan-Manuel Gimeno
Python Advanced – Building on the foundation
Python Advanced – Building on the foundation
Kevlin Henney
Python Worst Practices
Python Worst Practices
Daniel Greenfeld
Andere mochten auch
(7)
IPC with Qt
IPC with Qt
Scripting Your Qt Application
Scripting Your Qt Application
Qt 5 - C++ and Widgets
Qt 5 - C++ and Widgets
Python Tricks That You Can't Live Without
Python Tricks That You Can't Live Without
Object-oriented Programming in Python
Object-oriented Programming in Python
Python Advanced – Building on the foundation
Python Advanced – Building on the foundation
Python Worst Practices
Python Worst Practices
Ähnlich wie Practical Model View Programming
Integrazione QML / C++
Integrazione QML / C++
Paolo Sereno
The STL
The STL
adil raja
Treinamento Qt básico - aula II
Treinamento Qt básico - aula II
Marcelo Barros de Almeida
In-Depth Model/View with QML
In-Depth Model/View with QML
ICS
Qt Workshop
Qt Workshop
Johan Thelin
K is for Kotlin
K is for Kotlin
TechMagic
TechTalk - Dotnet
TechTalk - Dotnet
heinrich.wendel
Pointcuts and Analysis
Pointcuts and Analysis
Wiwat Ruengmee
Basics of Model/View Qt programming
Basics of Model/View Qt programming
ICS
The Ring programming language version 1.9 book - Part 94 of 210
The Ring programming language version 1.9 book - Part 94 of 210
Mahmoud Samir Fayed
greenDAO
greenDAO
Mu Chun Wang
Applying Compiler Techniques to Iterate At Blazing Speed
Applying Compiler Techniques to Iterate At Blazing Speed
Pascal-Louis Perez
Bw14
Bw14
Hassan62424
Best Practices in Qt Quick/QML - Part 4
Best Practices in Qt Quick/QML - Part 4
ICS
삼성 바다 앱개발 실패 노하우 2부
삼성 바다 앱개발 실패 노하우 2부
mosaicnet
I want help in the following C++ programming task. Please do coding .pdf
I want help in the following C++ programming task. Please do coding .pdf
bermanbeancolungak45
Functional C++
Functional C++
Kevlin Henney
Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.
Platonov Sergey
VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLE
Darwin Durand
C++ extension methods
C++ extension methods
phil_nash
Ähnlich wie Practical Model View Programming
(20)
Integrazione QML / C++
Integrazione QML / C++
The STL
The STL
Treinamento Qt básico - aula II
Treinamento Qt básico - aula II
In-Depth Model/View with QML
In-Depth Model/View with QML
Qt Workshop
Qt Workshop
K is for Kotlin
K is for Kotlin
TechTalk - Dotnet
TechTalk - Dotnet
Pointcuts and Analysis
Pointcuts and Analysis
Basics of Model/View Qt programming
Basics of Model/View Qt programming
The Ring programming language version 1.9 book - Part 94 of 210
The Ring programming language version 1.9 book - Part 94 of 210
greenDAO
greenDAO
Applying Compiler Techniques to Iterate At Blazing Speed
Applying Compiler Techniques to Iterate At Blazing Speed
Bw14
Bw14
Best Practices in Qt Quick/QML - Part 4
Best Practices in Qt Quick/QML - Part 4
삼성 바다 앱개발 실패 노하우 2부
삼성 바다 앱개발 실패 노하우 2부
I want help in the following C++ programming task. Please do coding .pdf
I want help in the following C++ programming task. Please do coding .pdf
Functional C++
Functional C++
Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.
VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLE
C++ extension methods
C++ extension methods
Mehr von Marius Bugge Monsen
The Anatomy of Real World Apps - Dissecting cross-platform apps written using...
The Anatomy of Real World Apps - Dissecting cross-platform apps written using...
Marius Bugge Monsen
About Cutehacks
About Cutehacks
Marius Bugge Monsen
How to hire and keep good people
How to hire and keep good people
Marius Bugge Monsen
I can see your house from here
I can see your house from here
Marius Bugge Monsen
The Qt 4 Item Views
The Qt 4 Item Views
Marius Bugge Monsen
Qt Widgets In Depth
Qt Widgets In Depth
Marius Bugge Monsen
Qt Itemviews, The Next Generation
Qt Itemviews, The Next Generation
Marius Bugge Monsen
Qt Itemviews, The Next Generation (Bossa09)
Qt Itemviews, The Next Generation (Bossa09)
Marius Bugge Monsen
Mehr von Marius Bugge Monsen
(8)
The Anatomy of Real World Apps - Dissecting cross-platform apps written using...
The Anatomy of Real World Apps - Dissecting cross-platform apps written using...
About Cutehacks
About Cutehacks
How to hire and keep good people
How to hire and keep good people
I can see your house from here
I can see your house from here
The Qt 4 Item Views
The Qt 4 Item Views
Qt Widgets In Depth
Qt Widgets In Depth
Qt Itemviews, The Next Generation
Qt Itemviews, The Next Generation
Qt Itemviews, The Next Generation (Bossa09)
Qt Itemviews, The Next Generation (Bossa09)
Practical Model View Programming
1.
P R A
C T IC A L M O D EL V IEW PR O GR A M M IN G C O D E LESS . V I EW M O R E.
2.
Marius Bugge Monsen, MSc
(N TN U), Software D eveloper
3.
C ontents ●
An O verview of the Q t Model View Architecture ● An Introduction to The Model Interface ● Advanced Model View Techniques (Q t 4.1+)
4.
A n O
verview of the Q t M odel V iew A rchitecture
5.
6.
I tem S
elections U ser I nput I tem Selection State U ser I nput V iew I tem D elegate C hange N otif cations i D ata C hanges M odel
7.
Item B ased
V iews (Q t 3 and 4) Table W idget T ree W idget List W idget
8.
I tem S
elections V iew V iew M odel
9.
int main(int argc,
char *argv[]) { QApplication app(argc, argv); QDirModel model; QTableView view1; QTreeView view2; view1.setModel(&model); view2.setModel(&model); view1.setRootIndex(model.index(0, 0)); view1.show(); view2.show(); app.exec(); }
10.
11.
W hat do
you get ? Eff ciency i Flexibility Maintainability
12.
A n I
ntroduction To T he M odel Interface
13.
class ListModel :
public QAbstractListModel { Q_OBJECT public: ListModel(QObject *parent = 0); ~ListModel(); int rowCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; };
14.
ListModel::ListModel(QObject *parent)
: QAbstractListModel(parent) {} ListModel::~ListModel() {} int ListModel::rowCount(const QModelIndex &) const { return 10000; } QVariant ListModel::data(const QModelIndex &index, int role) const { if (role == Qt::DisplayRole) return index.row(); return QVariant(); }
15.
16.
0
0 1 2 0 0 1 1 2 2
17.
18.
int main(int, char
*[]) { ListModel model; QModelIndex index = model.index(2); QVariant data = model.data(index, Qt::DisplayRole); qDebug() << data; }
19.
D ecoration R
ole Type:Image File Size: 1.2 Mb ToolT ip R ole M y W orld D isplay R ole
20.
QVariant ListModel::data(const QModelIndex
&index, int role) const { if (role == Qt::DisplayRole) return index.row(); if (role == Qt::DecorationRole) return QColor(Qt::green); return QVariant(); }
21.
22.
class ColorDelegate :
public QItemDelegate { Q_OBJECT public: ColorDelegate(QObject *parent = 0); protected: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; };
23.
void ColorDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &option, const QModelIndex &index) const { const QAbstractItemModel *model = index.model(); QVariant decoration = model->data(index, Qt::DecorationRole); if (decoration.type() == QVariant::Color) { QLinearGradient gradient(option.rect.left(), 0, option.rect.width(), 0); QColor left = option.palette.color(QPalette::Background); gradient.setColorAt(0, left); QColor right = qvariant_cast<QColor>(decoration); gradient.setColorAt(1, right); painter->fillRect(option.rect, gradient); } QItemDelegate::paint(painter, option, index); }
24.
25.
One
100 -300 500 Two 599 300 233 Three 33 -34 -55 Four 200 502 200
26.
class TableModel :
public QAbstractTableModel { Q_OBJECT public: TableModel(QObject *parent = 0); ~TableModel(); int rowCount(const QModelIndex &parent) const; int columnCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; bool setData(const QModelIndex &index, const QVariant &value, int role); Qt::ItemFlags flags(const QModelIndex &index) const; // not part of the model interface bool load(const QString &fileName); bool save(const QString &fileName) const; private: int rows, columns; QVector<QVariant> table; };
27.
QVariant TableModel::data(const QModelIndex
&index, int role) const { int i = index.row() * columns + index.column(); QVariant value = table.at(i); if (role == Qt::EditRole || role == Qt::DisplayRole) return value; if (role == Qt::TextColorRole && value.type() == QVariant::Int) { if (value.toInt() < 0) return QColor(Qt::red); return QColor(Qt::blue); } return QVariant(); }
28.
bool TableModel::setData(const QModelIndex
&index, const QVariant &value, int role) { int i = index.row() * columns + index.column(); if (role == Qt::EditRole) { table[i] = value; QModelIndex topLeft = index; QModelIndex bottomRight = index; emit dataChanged(topLeft, bottomRight);// <<< important! return true; } return false; } Qt::ItemFlags TableModel::flags(const QModelIndex &index) const { return QAbstractTableModel::flags(index)|Qt::ItemIsEditable; }
29.
bool TableModel::load(const QString
&fileName) { QFile file(fileName); if (!file.open(QIODevice::ReadOnly|QIODevice::Text)) return false; rows = columns = 0; table.clear(); QTextStream in(&file); bool result = parse(in); reset();// <<< important! return result; }
30.
31.
A dvanced M
odel V iew Techniques (Q t 4.1+)
32.
M odel
P roxy V iew
33.
M odel
S orting V iew
34.
int main(int argc,
char *argv[]) { QApplication app(argc, argv); TableModel model; model.load("table.data"); QSortingProxyModel sorter; sorter.setSourceModel(&model); QTreeView treeview; treeview.setModel(&sorter); treeview.header()->setClickable(true); treeview.header()->setSortIndicatorShown(true); treeview.show(); return app.exec(); }
35.
36.
M odel
Filtering V iew
37.
int main(int argc,
char *argv[]) { QApplication app(argc, argv); QWidget widget; QBoxLayout *layout = new QBoxLayout(QBoxLayout::TopToBottom, &widget); QLineEdit *lineedit = new QLineEdit; layout->addWidget(lineedit); TableModel model; model.load("table.data"); QStringFilterModel filter; filter.setSourceModel(&model); QObject::connect(lineedit,SIGNAL(textChanged(const QString&)), &filter,SLOT(setPattern(const QString&))); QTableView *tableview = new QTableView; tableview->setModel(&filter); layout->addWidget(tableview); widget.show(); return app.exec(); }
38.
39.
M odel
1 A gg regating V iew M odel 2
40.
int main(int argc,
char *argv[]) { QApplication app(argc, argv); QTreeView treeview; QStringListModel model_1(QStringList() << "ALPHA" << "BRAVO" << "CHARLIE" << "DELTA"); QDirModel model_2; QAggregatingProxyModel aggregator; aggregator.appendSourceModel(&model_1); aggregator.appendSourceModel(&model_2); treeview.setModel(&aggregator); treeview.show(); return app.exec(); }
41.
42.
W hat we
have covered ● Q t Model View Architecture O verview ● The Model Interface Introduction ● Advanced Techniques Using the Model Interface
43.
M ore Inform
ation http://doc.trolltech.com/4.0/model-view-programming.html http://doc.trolltech.com/4.0/model-view.html
Jetzt herunterladen