Skip to content
Snippets Groups Projects
README.md 2.56 KiB
Newer Older
  • Learn to ignore specific revisions
  • Pascal Tomschi's avatar
    Pascal Tomschi committed
    # QGIS-Plugin Portierung von Qt5 nach Qt6
    
    Anhand dieses Plugins soll beispielhaft gezeigt werden, wie die Portierung eines QGIS-Plugins von Qt5 nach Qt6 möglich ist, um eine Kompatibilität mit QGIS 4 zu erreichen. Hintergrund dieses Repos ist der [Beitrag](https://wheregroup.com/blog) vom [datum] im WhereGroup-Blog.
    
    
    Pascal Tomschi's avatar
    Pascal Tomschi committed
    Ursprünglicher Code mit Qt5: https://repo.wheregroup.com/ptomschi/qgis4-plugin/-/tree/main?ref_type=heads \
    Portierter Code, der Qt5 und Qt6 unterstützt: https://repo.wheregroup.com/ptomschi/qgis4-plugin/-/tree/qt6?ref_type=heads
    
    Pascal Tomschi's avatar
    Pascal Tomschi committed
    
    ## Vorgehen
    
    Für die Portierung steht uns das Skript [pyqt5_to_pyqt6.py](https://github.com/qgis/QGIS/blob/master/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py) der QGIS-Entwicklercommunity zur Verfügung, das für uns den Großteil oder sogar alle erforderlichen Änderungen automatisch umsetzt.
    Wir haben uns für den auf [Github](https://github.com/qgis/QGIS/wiki/Plugin-migration-to-be-compatible-with-Qt5-and-Qt6) beschriebenen Weg mit Docker entschieden, welcher sehr unkompliziert funktioniert hat. Vorteil dieser Variante ist, dass wir uns nicht mit installierten Python-Versionen und fehlenden Bibliotheken herumschlagen müssen.
    
    1. Wechseln Sie in das Verzeichnis, in dem der Quellcode für das Plugin liegt:
    ```` 
    cd /pfad/zum/plugin
    ```` 
    
    2. Starten des Containers:
    
    ````  
    docker run -v "$(pwd):/home/pyqgisdev/" registry.gitlab.com/oslandia/qgis/pyqgis-4-checker/pyqgis-qt-checker:latest pyqt5_to_pyqt6.py --logfile /home/pyqgisdev/pyqt6_checker.log ./
    ````
    
    Der Docker Container führt das Skript aus und ersetzt alle “alten" Qt5-spezifischen Inhalte im Pluginverzeichnis.
    Änderungen, die das Skript nicht automatisch umgesetzt hat, aber noch zu Problemen in Qt6 führen können, werden im Logfile `pyqt6_checker.log` ausgegeben, welches ebenfalls im Pluginverzeichnis landet. \
    Wenn wir anschließend kurz ins Plugin schauen, sehen wir auch direkt einige Änderungen:
    ````
    - self.checkbox.setCheckState(Qt.Unchecked)
    + self.checkbox.setCheckState(Qt.CheckState.Unchecked)
    
    - checkbox.setCheckState(Qt.Checked)
    + checkbox.setCheckState(Qt.CheckState.Checked)
    
    - button_layout = QBoxLayout(QBoxLayout.LeftToRight)
    + button_layout = QBoxLayout(QBoxLayout.Direction.LeftToRight)
    
    - result = dialog.exec_()
    + result = dialog.exec()
    
    - if result == QDialog.Accepted:
    + if result == QDialog.DialogCode.Accepted:
    
    - QMessageBox.Yes | QMessageBox.No,QMessageBox.No,
    + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No, QMessageBox.StandardButton.No,
    
    Pascal Tomschi's avatar
    Pascal Tomschi committed
    
    - if contact_result == QMessageBox.Yes:
    + if contact_result == QMessageBox.StandardButton.Yes:
    
    Pascal Tomschi's avatar
    Pascal Tomschi committed
    ````