
È possibile generare gli adattatori e le classi di interfaccia QtDbus inserendo le variabili DBUS_ADAPTORS e DBUS_INTERFACES nel file di progetto, come nell'esempio che segue:
TEMPLATE = app
QT = core dbus
TARGET = qtdbus
DBUS_ADAPTORS = fi.inz.hello.xml
SOURCES = hello.cpp main.cpp
HEADERS = hello.h
L'esempio proviene dall'articolo inz's blog – qmake and d-bus il cui autore oltre a sottolineare che si tratta di una feature scarsamente documentata ci ricorda che le intestazioni generate vanno incluse in uno dei sorgenti facenti parte del progetto, pena il verificarsi di un errore in fase di compilazione. Per la verità esistono dei workaround con i quali si può cercare di ovviare a quest'ultimo inconveniente, per esempio quello utilizzato qui:
# work around bug in Qt
dbus_interface_source.depends = ${QMAKE_FILE_OUT_BASE}.h
dbus_adaptor_source.depends = ${QMAKE_FILE_OUT_BASE}.h
Data la scarsità di documentazione, per usare tale funzionalità al meglio dovremo far riferimento direttamente ai codici sorgenti. Se, ad esempio, siamo su Ubuntu 20.04 potremo ricavare molte informazioni utili dai file:
- /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/dbusadaptors.prf
- /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/dbuscommon.pri
- /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/dbusinterfaces.prf
Se ancora utilizziamo Qt4 i file da considerare sono:
- /usr/share/qt4/mkspecs/features/dbusadaptors.prf
- /usr/share/qt4/mkspecs/features/dbusinterfaces.prf
Scopriremo che Qt4 in quest'ambito è abbastanza limitato, consentendo solo di indicare il nome di uno o più file xml. Qt5 ci permette una configurazione più completa e strutturata, è infatti ad esempio possibile impostare i flag per qdbusxml2cpp con un formalismo tipo:
dbus_adaptor.header_flags = ...
dbus_adaptor.source_flags = ...
dbus_interface.source_flags = ...
dbus_interface.src_flags = ...
Per ulteriori dettagli e suggerimenti si rimanda alle discussioni reperibili online, ad esempio: Give qdbusxml2cpp some options within QtCreator | Qt Forum
Se questa soluzione non fosse sufficiente o soddisfacente, resta sempre la possibilità di chiamate “system” come quelle utilizzate qui o qui.