Abstrakt: Úvod do systému pluginů, přehled prostředí a dostupného API, příklad jednoduchého modulu v prostředí Python a C++.
Zásuvné moduly (pluginy) umožňují rozšiřovat funkčnost aplikace QDevKit a představují též nejsnazší způsob komunikace s FITkitem. Moduly je možno psát v jazyce C++ či Python a libovolně je kombinovat, přičemž platí, že C++ moduly mají širší API.
Každý plugin je oddělen od svého prostředí jednoduchou adresářovou strukturou skládájících se z minimálně tří souborů.
CMakeLists.txt - pravidla pro překlad
plugin.xml - popis (metadata)
plugin.{py/cpp} - zdrojový kód
plugin.png - ikona pluginu
Pravidla pro překlad (uvedená v souboru CMakeLists.txt) jsou víceméně shodná pro všechny, upravujeme je, pokud je třeba přibalit další soubory nebo volat další příkazy při překladu.
Ukázka překladových pravidel pro plugin PyQuotes
Metadata v souboru plugin.xml jsou nezbytná pro správnou funkci modulu. Nejdůležitější funkcí je definice typu modulu - binary / script a název souboru sdílené knihovny či skriptu. Soubor zapisujeme v jazyce XML 1.0.
Příklad souboru project.xml:
<?xml version="1.0" encoding="utf-8"?> <plugin type='script'> <name>My first plugin</name> <icon>plugin.png</icon> <comment>This is my first dummy plugin.</comment> <author>Marek Vavrusa</author> <email>marek AT vavrusa.com</email> <version>1.0</version> <license>GNU/GPL v2</license> <library>hello</library> </plugin>
Jako ukázka nám poslouží jednoduchý plugin, který zobrazí hlášku na ikoně systémové lišty. Pro zobrazení zprávy je nutné mít v nastavení programu povolené zobrazení ikony a zpráv v systémové liště.
Verze v jazyce Python
Zdrojový kód: hello.py
from PythonQt import * ''' Plugin initialization ''' def init(): return True ''' Plugin load event ''' def load(): tray.showMessage('Hello plugin', 'Hello world!') return True ''' Plugin unload event ''' def unload(): tray.showMessage('Hello plugin', 'Plugin unloaded.') return True
Verze v jazyce C++
Při kompilaci projektu musí být adresář umístěn do adresářové struktury qdevkit-plugins ze SVN repozitáře z důvodu nastavení cest k dynamickým knihovnám a hlavičkovým souborům (Pokud neupravíte CMakeLists.txt).
Zdrojový kód: hello.h
#pragma once #ifndef HELLO_H #define HELLO_H #include <QObject> #include <qdevkit/plugininterfaces.h> class Hello : public QObject, public PluginInterface { Q_OBJECT Q_INTERFACES(PluginInterface) public: Hello(); bool isLoaded(); // Check if plugin loaded int load(); // Load plugin int unload(); // Unload plugin int configure(); // Configure - non-compulsory, responds to configure request private: bool mLoaded; // Is loaded? }; #endif
Zdrojový kód: hello.cpp
#include "hello.h" #include <qdevkit/trayicon.h> Hello::Hello() : mLoaded(false) {} bool Hello::isLoaded() { return mLoaded; } int Hello::load() { tray().showMessage("Hello plugin", "Hello world!"); mLoaded = true; return mLoaded; } int Hello::unload() { tray().showMessage("Hello plugin", "Plugin unloaded."); mLoaded = false; return !mLoaded; } int Hello::configure() { return true; } Q_EXPORT_PLUGIN2(pnp_Hello, Hello)
Prostředí QDevKit obsahuje interaktivní interpret skritu v jazyce Python (modul pythonqtconsole). Stejně jako v modulech je možno využívat dostupné API, a tak je velmi užitečný k testování uživatelských skriptů za běhu programu.
V tomto prostředí není možno využívat implicitních funkcí init(), load(), unload() tak, jako v pluginech.
Seznámili jsme se s adresářovou strukturou modulu a vytvořili kostru jednoduchého pluginu. V další části plugin obohatíme o grafické rozhraní a propojíme s FITkitem.
Následující díl: Pluginy pro QDevKit: Tvorba grafického rozhraní
Zpět na návody