QApplication::exec() [static]

Verschiedenes zu Qt
Antworten
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

QApplication::exec() [static]

Beitrag von franzf »

Eine kleine Frage:
QApplication::exec() ist eine statische Methode. Warum wird das aber immer (in den Qt-Examples und Programmen und überhaupt) mit dem QApplication-Object wie ne Member-Methode aufgerufen? also

Code: Alles auswählen

QApplication app( argc, argv);
[...]
return app.exec();
Ich hab gelernt, dass static-Methoden nicht an ein Objekt gebunden sind und deshalb diese Aufruf-Variante ziemlich schlechter Stil ist.
Gibt es denn dafür irgend einen Grund? War exec() früher nicht static und man hat deshalb diese Variante so beibehalten?

Grüße
Franz
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ja, in Qt3 war es static und es ist kürzer [:)]
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Christian81 hat geschrieben:Ja, in Qt3 war es static und es ist kürzer [:)]
Ah, danke.
Trotzdem fehlt da ein nicht :D
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Upps :o
gilt als Ausrede dass ich etwas erkältet bin? ;)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Christian81 hat geschrieben:Upps :o
gilt als Ausrede dass ich etwas erkältet bin? ;)
Tztztz, aber, ok - ja.

Hab noch ein bissl rumprobiert.
Zwei QApplication-Objekte angelegt:
weder app1.exec() noch app2.exec() noch QApplication::exec() führt zu einem benutzbaren Programm. (Kein compile-error, keine runtime-Warnung...)
Das schreit doch nur so nach Singleton...
QApplication::create(argc, argv);
und dann über instance (oder qApp-Macro) auf die public-Schnittstelle zugreifen, am Ende [static] exit, oder vllt. ein weiteres Macro (wers kurz mag) ala qAppExit;

Das ist das erste mal, dass mir in der sonst so schönen API von Qt was aufstößt.
Aber egal. Die Anwender werden mit den ganzen Examples sowieso auf den "richtigen" Weg getrimmt.

Grüße
Franz
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ja, QApplication ist ein Singleton.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

OINK!
Ich hab Qt ohne debug installiert. Und das Q_ASSERT_X macht nur was MIT debug. Darum hab ich wohl vergebens auf eine Warnung gewartet.

Aber so ein richtiger Singleton ist das ja mal nicht:
QCoreApplication::init() hat geschrieben:Q_ASSERT_X(!self, "QCoreApplication", "there should be only one application object");
QCoreApplication::self = this;
Also nur bei debug ne qFatal-Message ausgeben, dass nur ein Objekt initialisiert werden darf, und dann trotzdem dem self-pointer ein this zuweisen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Naja, das wird wohl umständlicher...
Gentoo macht entweder debug oder release.
Wenn ich ein debug-Qt4 installiere hab ich wohl auch ein recht ausgebremstes KDE, das will ich nicht.

Bleibt mir wohl nichts anderes als zum Entwickeln eine lokale Qt-Installation einzurichten...

Hat da wer vorneweg Tips für mich?
Irgendwelche Umgebungsvariablen, damit mein App mit der Lokalen Installation linkt anstatt mit der vom System?

Danke
Franz
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Wenn andere Programme wie z.b. VLC nicht mit dem USE-Flag "debug" gebaut werden, warum sollte sie das ausbremsen?

Ich hab das USE-Flag "debug" nur für Qt in die /etc/portage/package.use gepackt.

Code: Alles auswählen

x11-libs/qt debug doc
x11-libs/qt-core debug doc
x11-libs/qt-dbus debug
x11-libs/qt-sql debug
x11-libs/qt-script debug
x11-libs/qt-xmlpatterns debug
x11-libs/qt-test debug
x11-libs/qt-gui debug
x11-libs/qt-qt3support debug
x11-libs/qt-webkit debug
x11-libs/qt-opengl debug
x11-libs/qt-svg debug
x11-libs/qt-assistant debug
x11-libs/qt-phonon debug
Ich hab KDE 3.5.9, die wird ja noch mit Qt3 gebaut und bis jetzt hatte ich auch noch keine Probleme damit.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich weiß nicht wie es in Deiner Distribution ist, aber normalerweise bedeutet Debug auch dass es alles im Debug-Mode, was gleichbedeutend wie 'ohne irgendwelche Optimierungen' ist, gebaut wird. Und das macht das ganze nicht gerade schnell.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Wenn vlc ohne debug gebaut ist, bezieht sich das nur auf VLC. Wenn auf dem Rechner nur die debug-Version der Qt4-Libs liegt werden auch nur diese gelinkt, und somit alles was mit debugging in Qt4 gemacht wird mitgenommen.
Außerdem sind die debug-libs deutlich größer als die ohne debugging-Symbolen.

Ich hab leider absolut keine Ahnung (ist mir z.Z. auch zu viel) wie da jetzt split und strip mit reinspielt. Also wenn debugging-infos ausgelagert werden.

In jedem Fall hab ich diesen Link gefunden:
http://technofreakatchennai.wordpress.c ... om-source/
Und so werd ich mir eine debug-Qt4 ins homedir legen.
Hoffentlich verwendet cmake dann auch diese Libs ;)

Grüße
Franz
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Hast recht, ist mir noch gar so aufgefallen, ich dachte beim USE-Flag "debug" wird beides gebaut.
Wenn auf dem Rechner nur die debug-Version der Qt4-Libs liegt werden auch nur diese gelinkt, und somit alles was mit debugging in Qt4 gemacht wird mitgenommen.
Damit meinst Du dynamisch zur Laufzeit, also vom Runtime-Linker gelinkt oder?
Antworten