Help: Creating a plasma 5 widget/plasmoid using QML and C++
Aditya Mehra
adix.me at gmail.com
Fri Jul 1 13:30:27 UTC 2016
Hi, I am currently trying to create a plasma 5 widget/plasmoid for
interaction with a python application using Dbus. I am using Qml/C++ for
building the plasmoid. I am trying to use K Develop 5 to build the widget
but am facing many errors in the process.
The plasmoid sends and receives string values to the python application
using QT DBus. The plasmoid builds without error inside KDevelop 5 but the
dbus adaptor is not being initialized and neither are my other classes
within the main function of the plasmoid. Only the QML file is displayed
with no connection to my main function when added to the desktop or tested
with execute in KDevelop 5.
The main.cpp:
#include "testplasmoid.h"
#include <klocalizedstring.h>
#include <QtQml/QQmlContext>
#include <QtQml/QQmlApplicationEngine>
#include <QtWidgets/QApplication>
#include "ExampleAdaptor.h"
#include "scriptlauncher.h"
#include <QtDBus>
#include <QtCore/QMetaObject>
#include <QtCore/QByteArray>
#include <QtCore/QList>
#include <QtCore/QMap>
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QVariant>
#include <QDebug>
#include <QtQml/QQmlExtensionPlugin>
testplasmoid::testplasmoid(QObject *parent, const QVariantList &args)
: Plasma::Applet(parent, args),
m_nativeText(i18n("Text coming from C++ plugin"))
{
}
testplasmoid::~testplasmoid()
{
}
QString testplasmoid::nativeText() const
{
return m_nativeText;
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
KDEDbusAdaptor KDEDbusAdaptor(&app); [<----- Initializing the
Class/Dbus Adaptor]
ScriptLauncher launcher; [<------ Initializing the Class]
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("KDEDbusAdaptor",
&KDEDbusAdaptor);
engine.rootContext()->setContextProperty("scriptLauncher", &launcher);
QObject *topLevel = engine.rootObjects().value(0);
QObject::connect(topLevel,SIGNAL(submitTextField(QString)),
&KDEDbusAdaptor,SLOT(sendQueryFunctionSlot(QString)));
QObject::connect(topLevel,SIGNAL(senddbussignal(QString)),
&KDEDbusAdaptor,SLOT(emptyslot(QString)));
return app.exec();
}
K_EXPORT_PLASMA_APPLET_WITH_JSON(testplasmoid, testplasmoid,
"metadata.json")
#include "testplasmoid.moc"
The CMakeList.txt is set as the follows:
add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.testplasmoid\")
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(testplasmoid_SRCS
main.cpp
scriptlauncher.cpp
ExampleAdaptor.cpp)
set(testplasmoid_HEADERS
testplasmoid.h
scriptlauncher.h
ExampleAdaptor.h)
find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
Quick
Core
DBus
Widgets
)
add_library(plasma_applet_testplasmoid MODULE ${testplasmoid_SRCS}
${testplasmoid_HEADERS})
kcoreaddons_desktop_to_json(plasma_applet_testplasmoid
package/metadata.desktop SERVICE_TYPES plasma-applet.desktop)
target_link_libraries(plasma_applet_testplasmoid
Qt5::DBus
Qt5::Gui
Qt5::Qml
Qt5::Quick
Qt5::Widgets
KF5::Plasma
KF5::I18n)
target_link_libraries(plasma_applet_testplasmoid
${QT_QTDECLARATIVE_LIBRARY})
install(TARGETS plasma_applet_testplasmod DESTINATION
${KDE_INSTALL_PLUGINDIR}/plasma/applets)
plasma_install_package(package org.kde.testplasmoid)
Request you to please guide me on why the main function doesn't work
in plasma5 and how can i fix it.
There is no documentation available on C++/QML plasmoid/widgets for
plasma 5 so asking for help here.
Thanks,
Aditya
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20160701/ba63da9f/attachment.html>
More information about the Plasma-devel
mailing list