Python qt: modelview
From wikinotes
Documentation
official Qt5 modelview tutorial https://doc.qt.io/qt-5/modelview.html
Core
qt modelview: models qt modelview: views qt modelview: delegates
Patterns
I've found the following pattern very flexible while using model/view in Qt. It allows you to reuse behaviours (in form of QActions) in different model/view variations.
In practice there is generally only one model, but possibly multiple views.
window/ actions/ __init__.py windowactions.py # code restricted to interface of model/view models/ __init__.py windowmodelbase.py # interface of model windowmodel.py views/ __init__.py windowviewbase.py # interface of view windowview.py __init__.pyExample QAction Implementation
class WindowCreateAction(QtWidgets.QAction): def __init__(self, view): if not isinstance(view, windowviewbase.WindowViewBase): raise TypeError() super(WindowCreateAction, self).__init__('Create Window Item', view) self.setIcon(my_qicon) self.setShortCut(QtCore.Qt.Key_New) view.addAction(self) # adds shortcuts to view's eventloop self._view = view self.triggered.connect(self._handle_triggered) def _handle_triggered(self, *args, **kwargs): # create your window item
- windowview and windowactions both refer to windowviewbase for type-checks
- actions are entirely standalone, and use only the interface outlined in windowviewbase and windowmodelbase
- actions can be added/removed to any view with minimal effort