Rust Desktop-Anwendungen · Teil 28TutorialFortgeschritten

Rust

Rust Desktop – Teil 28: MakerData Studio fertigstellen

Tests, Export und Veröffentlichung. Einsteigerlektion im Rust-Desktop-Kurs der Know-How-Schmiede.

Kapitel: 8

Veröffentlicht am

Prüfstand: Die Beispielprojekte wurden noch nicht mit Cargo und als GUI verifiziert. Sie sind Lernmaterial; ihre Ausführbarkeit ist noch zu prüfen.

Teil 28 – MakerData Studio fertigstellen

Lernziel: Abschlussprojekt zu Ende führen.
Voraussetzung: Rust Desktop – Teil 27.
Dauer: etwa 20–35 Minuten einschließlich eigener Übung.

Worum geht es?

Tests, Export und Veröffentlichung. Die Lektion verwendet eine kleine, überschaubare Desktop-Anwendung, die du selbst startest, veränderst und testest. Die folgenden Schritte sind auf Windows und Linux übertragbar.

Das solltest du verstehen

Export und Fehlermeldungen machen aus einer Demo ein kleines Werkzeug. Der letzte Schritt ist die Prüfung des tatsächlichen Dateiinhalts und des Release-Builds.

Projekt vorbereiten

Im Kursarchiv befindet sich ein vollständiges Cargo-Projekt unter beispielprojekte/teil-28/. Öffne den Ordner mit VS Code oder wechsle im Terminal hinein.

cd beispielprojekte/teil-28
cargo run

Es werden die im jeweiligen Cargo.toml festgelegten Abhängigkeiten benötigt. Die erste Kompilierung kann länger dauern. Kopiere für Experimente das Projekt in einen eigenen Arbeitsordner.

Cargo.toml

[package]
name = "rust_desktop_teil_28"
version = "0.1.0"
edition = "2024"

[dependencies]
eframe = "=0.37.0"

Vollständiges Beispiel (src/main.rs)

use eframe::egui;

#[derive(Default)]
struct DemoApp {
    values: Vec<f32>,
    input: String,
    status: String,
}

impl eframe::App for DemoApp {
    fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut eframe::Frame) {
        ui.heading("MakerData Studio – Abschluss");
        ui.horizontal(|ui| {ui.text_edit_singleline(&mut self.input);if ui.button("Hinzufügen").clicked(){if let Ok(v)=self.input.parse(){self.values.push(v);self.input.clear();}}});
        if ui.button("CSV exportieren").clicked(){let mut lines=String::from("nummer,temperatur\n");for (i,v) in self.values.iter().enumerate(){lines.push_str(&format!("{},{}\n",i+1,v));}self.status=match std::fs::write("messwerte.csv",lines){Ok(())=>"CSV gespeichert".into(),Err(e)=>e.to_string()};}
        ui.label(&self.status); for v in &self.values{ui.label(format!("{v:.1} °C"));}
    }
}

fn main() -> eframe::Result {
    eframe::run_native(
        "Rust Desktop – Lektion 28",
        eframe::NativeOptions::default(),
        Box::new(|_cc| Ok(Box::<DemoApp>::default())),
    )
}

Schrittweise ausprobieren

  1. Starte das Beispiel mit cargo run und beobachte, welche Elemente im Fenster erscheinen.
  2. Suche im Quelltext die Felder von DemoApp. Diese Daten bilden den Zustand der Anwendung.
  3. Suche nach impl eframe::App und der Methode ui(). Dort wird festgelegt, was die Anwendung anzeigt.
  4. Ändere zunächst nur einen Text oder Zahlenwert und starte die Anwendung erneut.
  5. Vergleiche anschließend das Verhalten nach einer Benutzereingabe mit dem gespeicherten Zustand.

Kontrollfrage: Was würde passieren, wenn du einen wichtigen Wert als lokale Variable innerhalb von ui() neu initialisierst, statt ihn in DemoApp zu speichern?

Übungsaufgabe

Füge einen JSON-Export oder eine Filterfunktion hinzu.

Versuche die Änderung zunächst ohne Musterlösung. Lies Compiler-Fehlermeldungen vollständig und prüfe zuerst die betroffene Zeile.

Musterlösung / Lösungshinweis anzeigen

Die vollständige Ausgangslösung steht im zugehörigen Cargo-Projekt. Für die Erweiterung gehst du so vor:

  1. Lege gegebenenfalls ein zusätzliches Feld in DemoApp an.
  2. Ergänze das passende Widget oder die Verzweigung in ui().
  3. Übernimm nur gültige Eingabewerte und zeige Fehler verständlich an.
  4. Teste mindestens den normalen Ablauf und einen Grenzfall.

Erfolgskriterium: Die geforderte Änderung ist nach der Interaktion im Fenster sichtbar und verursacht keinen Absturz.

Typische Probleme

  • cargo wird nicht gefunden: Prüfe die Rust-Installation und starte das Terminal neu.
  • Abhängigkeiten laden nicht: Prüfe Internetverbindung und Versionsangaben in Cargo.toml.
  • Ein Compilerfehler erscheint: Kontrolliere die betroffene Zeile, Klammern und Datentypen; vermeide reflexhaft unwrap().
  • Die Änderung verschwindet: Ein zustandsrelevanter Wert gehört wahrscheinlich in DemoApp.
  • Linux öffnet kein Fenster: Prüfe installierte Grafik- und Entwicklungspakete für die verwendete Distribution.

Wissenscheck

  • Kannst du in eigenen Worten erklären, was dieses Beispiel demonstriert?
  • Welche Daten werden in DemoApp gespeichert und warum?
  • Was unterscheidet eine Benutzereingabe von einer rein grafischen Anzeige?
  • Wie würdest du die Funktion ohne Hilfestellung erweitern?

Weiterlernen

← Vorherige Lektion · Kursübersicht · Nächste Lektion →


Know-How-Schmiede · Rust Desktop-Kurs. Die Beispielprojekte sind Lernmaterial und sollten vor der Veröffentlichung lokal mit deiner Werkzeugkette geprüft werden.

Desktop-Kurs mit Beispielprojekten herunterladen