Einbinden von dynamischen Daten

Plasma trennt Darstellungen und Daten/Inhalte streng voneinander. Die Applets übernehmen die Darstellung, ihre Daten beziehen sie aus einer der bestehenden DataEngines [1].

Mehrere Plasmoiden können sich eine DataEngine teilen, die Plasma bei Bedarf lädt. Benötigt kein Plasmoid mehr den Datenmotor, entlädt Plasma ihn wieder, so dass er keine Ressourcen konsumiert. Dies alles regelt Plasma selbständig, als Entwickler müssen Sie sich nicht darum kümmern.

Ein Motor ist die Hotplug-DataEngine. Sie gibt ein Signal, wenn Sie ein neues Gerät mit dem Computer verbinden. Für "Dr. Ade" soll sie einen eingesteckten USB-Stick erkennen. Dazu verbinden Sie das Signal sourceAdded(const QString&) der DataEngine mit dem Slot onSourceAdded(const QString&) (Listing 4, Zeile 2). In Zeile 3 gibt hotplug ein Signal, sobald Sie das Gerät wieder entfernen.

// drade.cpp, Zeilen 83 und 84
connect(dataEngine("hotplug"), SIGNAL(sourceAdded(const QString&)), this, SLOT(onSourceAdded(const QString&)));
connect(dataEngine("hotplug"), SIGNAL(sourceRemoved(const QString&)), this, SLOT(onSourceRemoved(const QString&)));

Als Ergebnis liefern die Signal/Slot-Konstruktionen eine QString-Variable in den Methoden onSourceAdded() sowie onSourceRemoved() zurück. Die erste Methode benutzen Sie, um mit Hilfe von Solid – der Hardwarebibliothek von KDE 4 – herauszufinden, um was für ein Gerät es sich handelt (Listing 5). Im Beispiel soll der Produktname genügen (Solid::Device(name);, Zeile 6). Die Daten, die Solid liefert, zeichnet die Methode paintInferface() dann in das Plasmoid (Zeilen 222 bis 243 in drade.cpp).

// drade.cpp, Zeilen 124 bis 131
void DrAde::onSourceAdded(const QString &name)
{
    m_isPlugged = true;
    showScreen(true);
    Solid::Device m_device = Solid::Device(name);
    kDebug() << "Solid: vendor, product, icon" << m_device.vendor() << m_device.product() << m_device.icon();
    m_volumeName = m_device.product();
}

Die Funktion showScreen() startet die Animation der SVG-Grafik – dazu später mehr. Sie benutzen zunächst den Parameter &name, um über Solid ein neues Gerät anzumelden (Solid::Device), das Sie dann der Member-Variable m_device übergeben, auf die auch die paintInterface()- Funktion zugreifen kann.

Konfiguration und Einstellungen

Sie können Applets auch mit Konfigurationsdialogen ausstatten. Die Dialoge erstellen Sie recht einfach mit dem Qt-Designer. Das Beispiel zeigt, wie Sie eine Checkbox, eine Spinbox und ein Slider-Element einsetzen. Die Userinterface-Datei (.ui) koppelt dabei Slider und Spinbox aneinander, indem sie die Signale valueChanged() und die Slots setValue() der jeweiligen Elemente verbindet.

Abbildung 4: Im Qt-Designer entwerfen Sie die grafische Oberfläche für das Konfigurationsmenü des Plasmoids.

Den Konfigurationsdialog binden Sie in drei Schritten ein (Listing 6): Die Methode init() liest die gespeicherten Einstellungen aus einem KConfigGroup-Objekt, das Plasma über eine Funktion in der Applet-Klasse zur Verfügung stellt (config()). Dann liest das Programm über cg.readEntry die Werte der Schlüssel animate und animDuration aus. Der zweite Parameter in der Klammer (Zeilen 3 und 4) diktiert jeweils die Voreinstellung.

// drade.cpp, Zeilen 70 bis 72
KConfigGroup cg = config();
m_animDuration = cg.readEntry("animDuration", 200);
m_animate = cg.readEntry("animate", true);

Über die Member-Variablen m_animate und m_animDuration bestimmen Sie, ob Sie das Applet animieren wollen und wie lange die Animation dauert.

In der Methode createConfigurationInterface() (Listing 7) erstellen Sie den Konfigurationsdialog. Plasma führt die Methode aus, sobald der Benutzer den Konfigurationsdialog öffnet. Sie lädt das Interface der UI-Datei und ergänzt Knöpfe wie OK, Anwenden und Abbrechen automatisch.

In den Zeilen 7 und 8 übergeben Sie der Methode die Werte, die Sie vorher aus dem KConfig-Objekt ausgelesen haben. Schließen Sie den Konfigurationsdialog, muss das Applet davon erfahren. Dazu verbinden Sie die Signale applyClicked() und okClicked() mit dem Slot configAccepted() – einer Methode des Applets (Zeilen 10 und 11). Abschließend ergänzen Sie das Widget in Zeile 12 um den Konfigurationsdialog, wobei ein Pointer zum Einsatz kommt.

// drade.cpp, Zeilen 141 bis 159
void DrAde::createConfigurationInterface(KConfigDialog *parent)
{
    QWidget *widget = new QWidget;
    ui.setupUi(widget);
    parent->setButtons( KDialog::Ok | KDialog::Cancel | KDialog::Apply );
    ui.speedSlider->setValue(m_animDuration);
    ui.speedSpin->setValue(m_animDuration);
[…]
    connect( m_dialog, SIGNAL(applyClicked()), this, SLOT(configAccepted()) );
    connect( m_dialog, SIGNAL(okClicked()), this, SLOT(configAccepted()) );
    parent->addPage(widget, parent->windowTitle(), "drade");
}

Die Methode configureAccepted() (Listing 8) gibt ein Signal, sobald der Anwender im Konfigurationsbereich die Buttons OK oder Anwenden drückt. Die Methode gleicht die Daten des Applets mit jenen des Benutzers ab und schreibt sie meist auch direkt in die Konfiguration. Zum Speichern dient hier KConfig, KDEs Konfigurationssystem, das auch dafür sorgt, dass Sie die Daten einfach wieder auslesen können. Da KConfig viele Qt-Typen unterstützt, brauchen Sie sich kaum Gedanken über das Format zu machen, oder wie Sie verschiedene Datentypen speichern und einlesen. Es genügt, abstrakte Daten – wie zum Beispiel eine QColor-Farbe – in einen Konfigurationseintrag zu schreiben und sie später wieder auszulesen.

In der Methode von Listing 8 lesen Sie die Werte aus dem UI-Objekt. Dann schreiben Sie sie in die Konfigurationsdatei sowie in die Member-Variable, um bei Bedarf einfach auf die Daten zuzugreifen. Da sich möglicherweise interne Daten geändert haben, erneuern Sie die Verbindung mit der DataEngine (update()).

// drade.cpp, Zeilen 161 bis 172
void DrAde::configAccepted()
{
    m_animDuration = ui.speedSlider->value();
    m_animate = ui.Animate->isChecked();
    config().writeEntry("animate", m_animate);
    config().writeEntry("animDuration", m_animDuration);
    update();
    emit configNeedsSaving();
}

Indem Sie update() aufrufen, malt Plasma das Applet neu. Zugleich geben Sie auf diese Weise an, dass sich die Konfiguration geändert hat. Plasma kümmert sich in der Folge darum, dass die Konfigurationsdaten "in Kürze" auf der Festplatte landen. Es speichert die Daten nicht direkt: Bringen bestimmte Einstellungen den KDE-4-Desktop zum Absturz, soll er bei einem Neustart nicht gleich wieder den Geist aufgeben. Zugleich bündeln Sie durch die Verzögerung die Schreibzugriffe auf die Festplatte, was Energie spart.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Erste Plasma-Widgets bereits auf Maemo 5 portiert
    Am Maemo-Summit in Amsterdam verteilte Nokia 300 Internettablets N900 an KDE- und Qt-Entwickler. Jetzt gibt es bereits erste Ports von KDE-Programmen für Maemo 5.
  • KDE 4.11 erhält verbesserten Task-Manager
    Eike Hein hat in einem Blog-Beitrag einen Ausblick auf die überarbeitete Fensterleiste im kommenden KDE 4.11 gegeben. Verbesserungen gab es vor allem beim Layout und der Anordnung der Einträge auf der Leiste.
  • Plasmoiden erstellen mit JavaScript
    Seit Version 4.4 bietet die KDE Software Compilation die Möglichkeit, Plasmoiden in JavaScript oder QtScript zu schreiben. Dadurch eröffnet sich die Welt der KDE-Widgets auch Nicht-Programmierern.
  • Plasmische Chirurgie
    KDE 4 definiert den Desktop um. Was aber steckt hinter Plasma und was sind Plasmoiden? KDE-Entwickler Sebastian Kügler erklärt das neue Desktop-Design.
  • KDE-Miniprogramme mit Plasmate programmieren
    Das KDE-Projekt hat eine erste Alphaversion von Plasmate veröffentlicht. Die kleine Entwicklungsumgebung ist zum Schreiben der Plasmoide genannten Applets für den KDE-4-Desktop gedacht.
Kommentare

Infos zur Publikation

LU 08/2016: Multimedia

Digitale Ausgabe: Preis € 5,99
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

Wie kann man das berichtigen
Udo Muelle, 17.07.2016 20:39, 1 Antworten
Fehlschlag beim Holen von http://extra.linuxmint.com/dists/rosa/main/binary-i386/Packages Hash-S...
Installation Genimotion
Horst Müller, 15.07.2016 17:00, 1 Antworten
Hallo, ich kann Genimotion nicht installieren. Folgende Fehlermeldung habe ich beim Aufruf erh...
Probleme beim Hochfahren der Terastaion 5400 mit Unix-Distrib
Sheldon Cooper, 10.07.2016 09:32, 0 Antworten
Hallo ihr lieben, habe seit zwei Tagen das Problem, das das NAS (Raid5) nicht mehr sauber hoch...
Mit Firewire Videos improtieren?
Werner Hahn, 09.06.2016 11:06, 5 Antworten
Ich besitze den Camcorder Panasonic NV-GS330, bei dem die Videos in guter Qualität nur über den 4...
lidl internetstick für linux mint
rolf meyer, 04.06.2016 14:17, 3 Antworten
hallo zusammen ich benötige eure hilfe habe einen lidl-internetstick möchte ihn auf linux mint i...