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
 

Ä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.
  • 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.
  • 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.
  • 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.
  • 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.
Kommentare

Infos zur Publikation

LU 01/2015: E-Books im Griff

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

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

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

PCLinuxOS Version 2014.08 "FullMonty" Umstellung auf deutsch
Karl-Heinz Welz, 19.12.2014 09:55, 3 Antworten
Hallo, liebe Community, ich bin 63 Jahre alt und möchte jetzt nach Jahrzehnten Windows zu Linux...
ICEauthority
Thomas Mann, 17.12.2014 14:49, 2 Antworten
Fehlermeldung beim Start von Linux Mint: Could not update ICEauthority file / home/user/.ICEauth...
Linux einrichten
Sigrid Bölke, 10.12.2014 10:46, 5 Antworten
Hallo, liebe Community, bin hier ganz neu,also entschuldigt,wenn ich hier falsch bin. Mein Prob...
Externe USB-Festplatte mit Ext4 formatiert, USB-Stick wird nicht mehr eingebunden
Wimpy *, 02.12.2014 16:31, 0 Antworten
Hallo, ich habe die externe USB-FP, die nur für Daten-Backup benutzt wird, mit dem YaST-Partition...
Steuern mit Linux
Siegfried Markner, 01.12.2014 11:56, 2 Antworten
Welches Linux eignet sich am besten für Steuerungen.