staging.inyokaproject.org

Hat jemand Interesse an (m)einem simplen qt-shutdown - Programm?

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

hakaishi

(Themenstarter)
Avatar von hakaishi

Anmeldungsdatum:
28. April 2008

Beiträge: 525

Ich habe Paketabhängigkeiten für qt-shutdown-p entdeckt:

  • libqtcore4

  • libqtgui4

hier die neue .deb:

qt-shutdown-p-0.9.9-all.deb (43.6 KiB)
Download qt-shutdown-p-0.9.9-all.deb

hakaishi

(Themenstarter)
Avatar von hakaishi

Anmeldungsdatum:
28. April 2008

Beiträge: 525

Unterstützung für Jaunty bzw. gnome-power-cmd ist jetzt implementiert. Für einige vorige Ubuntu-Versionen ist es gnome-power-cmd.sh...

qt-shutdown-p-1.0-all.deb (44.0 KiB)
Download qt-shutdown-p-1.0-all.deb

hakaishi

(Themenstarter)
Avatar von hakaishi

Anmeldungsdatum:
28. April 2008

Beiträge: 525

So. Die Wiki für qt-shutdown-p ist jetzt fertig. Wenn es noch Fehler gibt, oder etwas dass ich auf der Wikiseite verbessern sollte, dann meldet euch.
Wieso kann man eigentlich keine Dateianhänge auf der eigenen Wikiseite löschen? - Oder habe ich da was übersehen?

Edit: Die obere Grenze für die Minutenzahl würde auf 9999 gesetzt.

Gruß Hakaishi

qt-shutdown-p-1.1-all.deb (44.0 KiB)
Download qt-shutdown-p-1.1-all.deb

hakaishi

(Themenstarter)
Avatar von hakaishi

Anmeldungsdatum:
28. April 2008

Beiträge: 525

Beim Start von qt-shutdown-p wird eine Konfigurationsdatei conf erstellt bzw. gelesen. Diese befindet sich unter ~/.qt-shutdown-p/. Hiermit ist ein rekompilieren des Programms überflüssig geworden.

Gruß Hakaishi

qt-shutdown-p-1.2-all.deb (48.0 KiB)
Download qt-shutdown-p-1.2-all.deb

hakaishi

(Themenstarter)
Avatar von hakaishi

Anmeldungsdatum:
28. April 2008

Beiträge: 525

Hallo Leute,

Hier noch mal ein Update:
Wegen der Standby-Sache schaut bitte ins Wiki, ansonsten wurde die Binärkompatibilität wiederhergestellt und das Systemtray aufgepeppt.

Edit: 5 Minutengrenze entfernt. (Programm neu hochgeladen)

Gruß Hakaishi

qt-shutdown-p-1.3-all.deb (47.2 KiB)
Download qt-shutdown-p-1.3-all.deb

hakaishi

(Themenstarter)
Avatar von hakaishi

Anmeldungsdatum:
28. April 2008

Beiträge: 525

Die Wiki ist fertig. qt-shutdown-p ist als Paketquelle verfügbar. https://launchpad.net/~hakaishi/+archive/qt-shutdown-p/+packages

Gruß Hakaishi

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

ok, ein paar Punkte:

  • nie Farben im Wiki verwenden, Text ist immer schwarz

  • Datei- und Verzeichnisnamen fett

  • keine direkte Anrede (hier: "Sie")

  • Paketnamen fett

  • eigentlich wollen wir hier im Wiki nicht auch .deb aus privaten PPA's verweisen... wobei der Weg, es darüber anzubieten schon ok ist... hm

Gruß, noisefloor

hakaishi

(Themenstarter)
Avatar von hakaishi

Anmeldungsdatum:
28. April 2008

Beiträge: 525

Den farbigen Text und die Anrede habe ich entfernt. Datei-, Pfad- und Paketnamen und größtenteils die Befehle sind jetzt fett.
Danke noisefloor!

@noisefloor: Auf die Source habe ich auch verwiesen, jedoch denke ich nicht, dass ein "einfacher" Anwender sich die Mühe machen würde es selbst zu kompilieren. Und außer .deb Pakete fällt mir nichts Anderes ein (wobei man .deb Dateien als Dateianhang nicht auf die Wiki laden darf... - Über Launchpad sind die .deb Dateien öffentlich und signiert...).

Gruß Hakaishi

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

völlig richtig.

Die Situation ist hier auch etwas diffiziler. Wir sagen "grundsätzlich keine persönlichen PPAs", damit das Wiki nicht von solchen überschwemmt wird. Z.B. nur weil z.B. jemand ein Prog, was eigentlich in den Quellen ist, in einer neueren Version mit anderen Parametern und zusätzlichen Plug-Ins kompiliert muss das noch lange nicht ins Wiki.

In deinem Fall ist die Lage halt ein bisschen anders, weil das Prog halt nur über dein PPA zu beziehen ist. Und es kollidiert mit nichts, was in den Quellen ist. Hm... IMHO, lass' es erstmal drin, auch wenn das ein wenig inkonsequent von uns (Wiki-Team) ist.

Sonst fertig?

Gruß, noisefloor

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Das Quellarchiv ist fehlerhaft. Zum einen heißt es „locale“, nicht „local“, desweiteren existiert die qmake-Datei nur für das Quellverzeichnis. In dieser Konfiguration werden Sprachdateien und Bilder nicht korrekt installiert, wenn der Nutzer selbst qmake ausführt. Die Installation sollte ebenfalls in der Projektdatei beschrieben sein, qmake kann auch make install umsetzen.

Anwendungssymbole, die in Desktop-Entry-Dateien Verwendung finden, sollten den entsprechenden Freedesktop-Standards gemäß unter /usr/share/icons/ oder /usr/share/pixmaps/ abgelegt werden, dann findet die Desktopumgebung das Symbol auch ohne absoluten Pfad.

Der Quelltext ist ebenfalls verbesserungsbedürftig. In main.cpp werden Sprachdateien nur gefunden, wenn sie unterhalb des Verzeichnisses der ausführbaren Datei liegen, was bei einer Installation nicht der Fall ist.

In gui.cpp fällt als erstes die umständliche und fehleranfällige Art auf, mit der Du die Programmeinstellungen speicherst. Die QSettings-Klasse existiert, um Dir diese Arbeit abzunehmen. Wenn Du in main.cpp die Metadaten der Anwendung korrekt setzt (organizationName und applicationName), dann wird die Einstellungsdatei bei Verwendung dieser Klasse auch automatisch am richtigen Ort abgelegt. Als nächstes fällt auf, dass Du das komplette Fenster und alle darin enthaltenen Steuerelement mit festen und unveränderbaren Größenangaben versiehst. Ändere mal die Schriftgröße und beobachte, was mit Deinem Fenster passiert. Verwende bitte Layouts, um Deine Anwendung unabhängig von der Umgebung zu machen. Am besten nutzt Du gleich den Designer, dann sparst Du Dir auch den ganzen langweiligen Code zur Erzeugung und Initialisierung der Steuerelemente.

Zudem ist die Gui-Klasse voll von nichtssagenden Attributen wie ni. Du definierst sogar Attribute namens i, a, b und c. Die Namen sagen doch selbst Dir nichts, benenne die Variablen doch aussagekräftig. Und am besten auch gleich durchgehend in Englisch, den ein Gemisch aus deutschen und englischen Bezeichner liest sich nicht gut.

Diese ganze Rechnerei mit Zeiten kannst Du Dir auch komplett sparen, wenn Du durchgängig Gebrauch von QTime oder der QDateTime machst.

Zum Schluss noch der Hinweis, dass system() eine Funktion mit vielfältigen Problemen ist und nicht verwendet werden sollte. Nutze doch die QProcess-Klasse.

hakaishi

(Themenstarter)
Avatar von hakaishi

Anmeldungsdatum:
28. April 2008

Beiträge: 525

Endlich mal jemand der konstruktive Vorschläge hat ^^
@ Lunar. Ich denke, dass es recht egal ist ob ich den Ordner local (wie in /usr/share/local), locale, oder locales nenne. In der Installation über .deb werden die Sprach- und Bilddateien über die debian/rules kopiert. Die Readme besagt, dass wenn man per Source installieren möchte, die Makefile.ex benutzen soll. In dieser werden die Sprach- und Bilddateien korrekt an ihren richtigen Ort kopiert.

Über den Ort des Icons hatte ich mir auch bereits Gedanken gemacht... gut, das korrigiere ich nachher (wird in /usr/share/pixmaps kommen, allerdings mit einem anderen Namen).

QSettings werde ich mir mal ansehen.

Die Rechnerei mit QTime nervt mich ehrlich gesagt auch. Könntest du mir sagen, wie ich direkt die Zeit aus dem TimeEdit mit der lokalen Zeit in einer if-Schleife überprüfen lassen kann und wie ich dann noch die verbleibenden Stunden und Minuten anzeigen lassen kann?

Die Sache mit den Variablen ändere ich auch noch, wobei, sollte ich QSettings benutzen werden a,b,c sowieso entfallen. Ansonsten gibt es ja nur noch die Variable i, welche ich mit dem Kommentar "Zählvariable für Countdown" doch eindeutig gemacht habe.

system() habe ich ehrlich gesagt deswegen benutzt, weil der Shutdown-Befehl den QProcess killen würde. Wenn du mir verrätst, wie ich QProcess benutzen kann, sodass er sich nach dem Aufruf beendet ohne den gestarteten Befehl dabei wieder zu killen, so werde ich mich auch dazu überreden lassen ^^'

Gruß
Hakaishi

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Technisch gesehen ist es schon egal, nur heißt „local“ auf Deutsch eben „lokal“, während „locale“ eine Sprachumgebung bezeichnet. /usr/share/local/ hat auch nichts mit Lokalisierung zu tun. Die Übersetzungsdateien installierter Anwendungen liegen in /usr/share/locale/ (beachte das „e“). Der Name des Verzeichnisses ist daher ein wenig verwirrend, ich hätte die Lokalisierungsdateien nicht in diesem Verzeichnis erwartet.

Dein Buildsystem verstehe ich nicht ganz. Es sollte normalerweise ein einziges Buildsystem geben, nicht konkurrierende Make-Dateien. Makefile.ex mag zwar eine Debian-Notwendigkeit sein, aber unter Gentoo beispielsweise lässt sich Dein Programm nicht sinnvoll übersetzen, da ein qmake-Aufruf eben kein komplettes Makefile erzeugt. Entscheide Dich für ein Buildsystem. Wenn das qmake sein soll, dann verwende auch auschschließlich qmake.

QTimeEdit::time() gibt ein QTime-Objekt zurück. Für dieses Objekt sind zwar leider keine Operatoren definiert, aber über die Methoden msecsTo() und addMSecs() lässt sich trotzdem damit rechnen:

1
2
3
4
QTime someTimeInTheFuture(23, 50);
QTime remainingTime;
remainingTime.addMSecs(QTime::currentTime().msecsTo(someTimeInTheFuture));
qDebug() << remainingTime;

Der Standard-Konstruktor von QTime erzeugt die „Nullzeit (0:0:0). Addierst Du zur Nullzeit die Millisekunden, die zwischen zwei anderen Zeiten liegen, erhältst Du genau die Differenz beider Zeiten als Zeit-Objekt. Das ist zwar nicht schön, aber immer noch besser, als die ganze Rechnerei selbst zu machen.

Die Beschreibung Deines QProcess-Problems verstehe ich nicht. Wenn da System herunterfährt, werden alle Prozesse eh beendet. In jedem Fall sollte QProcess::execute() nicht anders funktionieren als system(), aber es gibt auch noch QProcess::startDetached, dass Prozesse garantiert unabhängig von Deinem eigenen Prozess startet.

hakaishi

(Themenstarter)
Avatar von hakaishi

Anmeldungsdatum:
28. April 2008

Beiträge: 525

@Lunar: das Verzeichnis für die Sprachdateien habe ich jetzt locale genannt.

Dein Source-Code funktioniert so bei mir nicht. Im Terminal wird nur QTime("") ausgegeben. Ich habe folgendes gemacht:

1
2
3
4
5
QTime someTimeInTheFuture = timeEdit->time();
QTime localTime = QTime::currentTime();
double i = localTime.secsTo(futureTime); //double weil der Tag 86400 Sekunden hat, was größer 32767 ist
if(i<0)
  i = 86400 + localTime.secsTo(futureTime);

Die deutschen Objekt- und Variablennamen habe ich durch englische (diesmal sinnvollere) ersetzt.
QProcess::startDetached funktioniert wunderbar und QSettings habe ich jetzt auch eingebaut. ^^

Bleiben nur noch zwei Dinge: Das Buildsystem und Layouts.
Zum Buildsystem: Ich verstehe nicht ganz, was zu tun ist, damit zwar die .deb richtig generiert wird, man jedoch auch mit qmake das Programm installieren kann. Please tell me ';.;'
Mit den Layouts habe ich das Problem, dass ich nicht ganz verstehe wie das zu machen ist. Toll wäre es z.B, dass wenn man das Fenster vergrößert (oder verkleinert) sich die Steuerelemente und die Schriften automatisch anpassen. Bei doc.trolltech.com sind die Beispiele hierzu (finde ich) nicht gerade gut...

Gruß
Hakaishi

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Mein Fehler, ich hatte nicht beachtet, dass .addMSecs() ein neues QTime-Objekt erzeugt. Dein Beispiel funktioniert zwar, aber die Verwendung eines Fließkommatyps an dieser Stelle ist vollkommen sinnlos. Die Methode gibt den Typ int zurück, die implizite Typumwandlung nach der Rückgabe ändert daran auch nichts mehr, und erhöht daher auch nicht auf magische Weise die Genauigkeit. int ist groß genug, 16 Bit ist nur die vom Standard verlangte minimale Größe des Typs. In der Praxis ist der Typ 32 Bit lang und kann daher mit einer oberen Grenze von 2^31-1 sogar die Anzahl der Millisekunden eines Tags locker speichern.

Was genau ist den an der Dokumentation des Designers und dem Layout-Howto unverständlich? Aber wie dem auch sei, eigentlich sind Layouts nicht schwer zu verstehen. Öffne Doch einfach mal den Designer und spiele mit dessen Layout-Möglichkeiten. Dann sind Layouts eigentlich selbstverständlich.

Wie Du qmake richtig verwendest, kann ich Dir nicht sagen, da ich das noch nie genutzt habe. Allerdings gibt es dazu ja ein umfangreiches Handbuch.

hakaishi

(Themenstarter)
Avatar von hakaishi

Anmeldungsdatum:
28. April 2008

Beiträge: 525

Danke für deine Hilfe Lunar 👍 . Scheint, als hätte ich mich in der maximalen Größe von int geirrt. Die Layout-Howto bei trolltech sehe ich zum ersten Mal...

Gut, dann lade ich heute oder spätestens morgen eine neue Version hoch.

Gruß
Hakaishi