Globale (konstante) Variablen zu einem Projekt

Verschiedenes zu Qt
Antworten
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Globale (konstante) Variablen zu einem Projekt

Beitrag von huckleberry »

Hallo Foristen,

wenn ich an einem Projekt dran bin, habe ich mir der Übersichtlichkeit wegen vorgenommen, alle Verwaltungstechnischen Informationen wie beispielsweise:
  • - Name der Applikation
    - Aktuellen Version (evtl später dann auch aufgeteilt in major und minor)
    - Zielplattform
    - Servernamen
    - und was weiss ich noch alles
in einer separate globalen Klasse aufzubewahren. Allerdings ist das ja eher ein schlechter Programmierstil.

Sinn wäre folgender:
Ich wollte von jeder anderen Klasse aus Fehlermeldungen wie "Eingabedatei nicht gefunden" in einer Messagebox ausgeben, welcher wiederum im Titel den Applikationname, Version usw beinhalten sollte.
Ich wollte zB die Versionsnummer nicht jedesmal manuell eintippen, um bei neuer Version nicht alle Vorkommen neu zu korrigieren.

Gibt es hier eine eleganten Möglichkeit?

Gruß Huck
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Das was du global abspeichern willst, ist legitim. Es wäre unhandlich, wenn an jeder Stelle, die die Version braucht, eine Instanz eines struct erzeugt oder von außen jene übergebenwerden müsste.
ABER: Diese Informationen werden zur Laufzeit NICHT verändert, sind also konstant.

Code: Alles auswählen

namespace ProgramInfo {
    static const int version = 0x403020;
    // usw.
}
Alternativ über Macros:

Code: Alles auswählen

#define PROGRAM_VERSION 0x403020
astrunck
Beiträge: 6
Registriert: 13. April 2011 16:50

Beitrag von astrunck »

... ist vielleicht was spät, aber ...

wie wäre es mit QCoreApplication, bzw. QApplication.
(applicationVersion(), etc.)

Gibt es nur einmal und besitzt genau die Attribute, welche du aufgelistet hast.

Man könnte ja ein Interface drüber legen, welches dann die Funktionen setApplication() etc. ausblendet.
Das Interface kann man ja dann überall dort, wo es benötigt wird, einbinden.
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Beitrag von dazedly »

ich hab das Ganze folgendermaßen gemacht:

Ich hab drei Projekte und eine übergeordnete CMake. Alle Sollen die selbe version besitzen.

CMake (man beachte auch -DVERSION="Debug ${PROGRAMVERSION}") :

Code: Alles auswählen

SET(PROGRAMVERSION "0.01")
.....
.....
...
add_definitions(-ggdb -march=native -DVERSION="Debug ${PROGRAMVERSION}" -DDEBUG -Wall -Wextra -pedantic -pedantic-errors -Wall -Wextra -Werror -Wno-long-long)
In den Mains:

Code: Alles auswählen

#ifndef VERSION
	#define VERSION "NOT SET"
#endif

.....
.....
...
	QApplication app(argc, argv);
	app.setApplicationName("Programmname");
	app.setApplicationVersion(VERSION);
Wird wohl mit qmake ähnlich funktionieren.
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Beitrag von huckleberry »

Dankeschön. Das sind gute Anregungen. Ich werde mich damit auseinandersetzen..
Antworten