–v–
–v–
🧑💻: Práctica!
1. ¿Por qué plugins para QField?
🧑💻: Práctica!
–v–
2. Plugins para QField (generalidades) 🧑💻
🧑💻: Práctica!
–v–
–v–
Declarativo
Orientado al diseño de interfaces
Imperativo
Lógica de la aplicación
–v–
| PLUGINS DE PROYECTO | PLUGINS DE APLICACIÓN |
|---|---|
| Se comparten junto al proyecto de QField | Se comparten vía URL (archivo ZIP) |
| Plugin único | Múltiples plugins |
| Instalación no requerida | Installation requerida |
| Disponible en la sesión del proyecto | Disponible en la sesión de QField |
–v–
¡Demo / Práctica!
Plugin de proyecto
Plugin de aplicación
–v–
Revisitando…
| PLUGINS DE PROYECTO | PLUGINS DE APLICACIÓN |
|---|---|
| Se comparten junto al proyecto de QField | Se comparten vía URL (archivo ZIP) |
| Plugin único | Múltiples plugins |
| Instalación no requerida | Installation requerida |
| Disponible en la sesión del proyecto | Disponible en la sesión de QField |
–v–
¿Para qué?
Hacer más eficiente la captura de datos en campo.
(Ejemplo: plugin Snap)
–v–
Snap!

–v–
¿Para qué?
Hacer más eficiente la captura de datos en campo.
(Ejemplo: plugin Snap)
Obtener información útil calculada por un Servicio Web.
(Ejemplo: ruteo con OSRM).
–v–
–v–
¿Para qué?
Hacer más eficiente la captura de datos en campo.
(Ejemplo: plugin Snap)
Obtener información útil calculada por un Servicio Web.
(Ejemplo: ruteo con OSRM).
Obtener información de internet basada en mi localización.
(Ejemplo: plugin de pronóstico del tiempo)
Nota: ¡Antes de crear un plugin, revisa si la funcionalidad ya está en QField!
–v–
–v–
¿Dónde encontrar otros plugins?
3. Introducción a QML 🧑💻
🧑💻: Práctica!
–v–
–v–
Qt Modeling Language, declarativo, orientado al diseño
Tipos de Objetos
–v–
Item, Rectangle, Text, TextInput, MouseArea, Dialog, ...
Text {
...
}
Ver QML Object Types para más detalles.
–v–
Item, Rectangle, Text, TextInput, MouseArea, Dialog, ...
Rectangle {
...
Text {
...
}
}
–v–
Item, Rectangle, Text, TextInput, MouseArea, Dialog, ...
Item {
...
Text {
...
}
}
–v–
Qt Modeling Language, declarativo, orientado al diseño
Tipos de Objetos
Atributos: Propiedades, señales, manejadores y métodos
–v–
Rectangle {
...
MouseArea {
id: myArea
...
}
}
–v–
Rectangle {
...
MouseArea {
id: myArea
enabled: true
anchors.fill: parent
}
}
–v–
Rectangle {
...
MouseArea {
id: myArea
enabled: true
anchors.fill: parent
onClicked: ...
}
}
–v–
Rectangle {
...
MouseArea {
id: myArea
enabled: true
anchors.fill: parent
onClicked: ...
function myCustomMethod() {
...
return ...;
}
}
}
–v–
Rectangle {
...
MouseArea {
id: myArea
enabled: true
anchors.fill: parent // Property binding!
onClicked: ...
function myCustomMethod() {
...
return ...;
}
}
}
–v–
Qt Modeling Language, declarativo, orientado al diseño
Tipos de Objetos
Atributos: Propiedades, señales, manejadores y métodos
Hola mundo (QML)! 👋
–v–
import QtQuick 2.0
Text {
text: "Hola mundo!"
}
–v–
Qt Modeling Language, declarativo, orientado al diseño
Tipos de Objetos
Atributos: Propiedades, señales, manejadores y métodos
Hola mundo (QML)! 👋
Recursos de QML
–v–
Introducción a Qt/QML, por KDAB: YouTube Playlist
Referencia QML: https://doc.qt.io/qt-6/qmlreference.html
Tutorial QML: https://doc.qt.io/qt-6/qml-tutorial.html
–v–
Qt Modeling Language, declarativo, orientado al diseño
Tipos de Objetos
Atributos: Propiedades, señales, manejadores y métodos
Hola mundo (QML)! 👋
Recursos de QML
Ejercicio online! 🧑💻
–v–
4. Desarrollando plugins para QField 🧑💻
🧑💻: Práctica!
–v–
–v–
Dashboard | Main menu | Search bar | Plugins toolbar | Positioning | Canvas actions

–v–
Dashboard | Main menu | Search bar | Plugins toolbar | Positioning | Canvas actions

–v–
Dashboard | Main menu | Search bar | Plugins toolbar | Positioning | Canvas actions

–v–
Dashboard | Main menu | Search bar | Plugins toolbar | Positioning | Canvas actions

–v–
Dashboard | Main menu | Search bar | Plugins toolbar | Positioning | Canvas actions

–v–
Dashboard | Main menu | Search bar | Plugins toolbar | Positioning | Canvas actions

–v–
–v–
iface
qgisProject
settings
clipboardManager
...
Ver qgismobileapp.cpp para más detalles.
–v–
iface.mainWindow()
iface.mapCanvas()
iface.findItemByObjectName("...")
iface.logMessage("...")
iface.addItemToPluginsToolbar()
iface.addItemToDashboardActionsToolbar()
iface.addItemToCanvasActionsToolbar()
Ver appinterface.h para más detalles.
–v–
Theme.mainColor // #80cc28
Theme.mainTextColor
Theme.mainBackgroundColor
Theme.darkGray
Theme.defaultFont
Theme.getThemeVectorIcon("...")
Ver Theme.qml para más detalles.
–v–
QfButton
QfToolButton
QfTextField
QfSwitch
QfComboBox
...
Ver src/qml/imports/Theme/* para más detalles.
–v–
LayerUtils
GeometryUtils
FeatureUtils
CoordinateReferenceSystemUtils
SnappingUtils
...
Ver src/core/utils/* para más detalles.
–v–
–v–
import QtQuick
Item {
Component.onCompleted: {
iface.mainWindow().displayToast('Hola mundo!')
}
}
–v–
QField GUI
QField API
¿Cómo escribir un plugin?
“Hola mundo”
Depurando 🐞
iface.logMessage("")
mainWindow.displayToast("")
console.log("") ?
Consejo: Inicia la aplicación desde la terminal de comandos para obtener un registro (log) más detallado.
–v–
QField GUI
QField API
¿Cómo escribir un plugin?
“Hola mundo”
Depurando
Plantilla de plugins para QField 🧑💻
5. Plugin para pronóstico del tiempo (Weather Forecast) 🧑💻
🧑💻: Práctica!
–v–
¡Recreemos este plugin!
–v–
¿Qué necesitamos?
6. Exhibición de plugins
🧑💻: Práctica!
–v–
Geometryless Addition
https://github.com/opengisch/qfield-geometryless-addition
–v–
VocalPoint plugin
https://github.com/SeqLaz/vocalpoint-qfield-plugin
–v–
Nominatim locator plugin
https://github.com/opengisch/qfield-nominatim-locator
–v–
LiveField plugin
–v–
QField plugin reloader
7. Recursos
🧑💻: Práctica!
–v–
Referencia del lenguaje QML: https://doc.qt.io/qt-6/qmlreference.html
Introducción a Qt/QML, por KDAB (YouTube Playlist)
Editor online de QML: https://qmlweb.github.io
Editor online avanzado de QML: https://patrickelectric.work/qmlonline/
Tutorial QML: https://doc.qt.io/qt-6/qml-tutorial.html
Listado de plugins para QField: https://github.com/topics/qfield-plugin
Íconos para plugins: https://fonts.google.com/icons

¡Gracias, y que se diviertan!