Hallo,
ich möchte gerne, dass anstatt dem Constructor
1
QApplication(int&argc,char**argv)
der folgende benutzt wird
1
QApplication(int&argc,char**argv,boolGUIenabled)
Und das, in dem der obere benutzt wird.
Ich suche also nach einer Möglichkeit, einen Aufruf des oberen
Constructors abzufangen und an den unteren zu leiten, wobei GUIenabled
auf "false" gesetzt werden soll.
Kann man einen Constructor so reimplementieren, dass das passiert?
Grüße,
Peter
Eigene Klasse von QApplication ableiten, dort den gewünschten
Konstruktor implementieren und dann mit dieser neuen Klasse das
Application Objekt in main anlegen.
Andere Chance hast du nicht, wenn du nicht den Original QT Code
verändern willst, was zwar möglich aber nicht ratsam ist.
Das Problem ist, dass QApplication als template an QService übergeben
wird.
1
QService<QApplication>(argc,argv,APPNAME);
Ich habe schon versucht, eine eigene Klasse anzulegen
class myApp : public QApplication
{
public:
myApp(int &argc, char **argv);
}
Aber wird hier nicht automatisch der Default-Constructor von
QApplication benutzt? Oder wie umgeht man das?
Jedenfalls darf ich das wohl nicht:
QService<myApp>(argc, argv, APPNAME);
Peter Diener schrieb:> Das Problem ist, dass QApplication als template an QService übergeben> wird.> QService<QApplication>(argc, argv, APPNAME);>> Ich habe schon versucht, eine eigene Klasse anzulegen>> class myApp : public QApplication> {> public:> myApp(int &argc, char **argv);> }>> Aber wird hier nicht automatisch der Default-Constructor von> QApplication benutzt? Oder wie umgeht man das?
Ja, außer du rufst den gewünschten Konstruktor explizit auf.
1
classmyApp:publicQApplication
2
{
3
public:
4
myApp(int&argc,char**argv)
5
:QApplication(argc,argv,false)
6
{};
7
}
> Jedenfalls darf ich das wohl nicht:>> QService<myApp>(argc, argv, APPNAME);
Das sollte prinzipiell so funktionieren.
Allerdings stellt sich mir die Frage, was QService eigentlich genau
macht, da ich es in der Qt Dokumentation nirgends finden konnte.
Du kannst auch den Basis-ctor im abgeleiteten ctor aufrufen, aber nur
nach dem : und vor dem Rumpf des abgeleiteten.
Wenn der Rumpf des abgeleiteten ctor läuft, muß der Basisteil
schließlich schon initialisiert sein.
Ich habs jetzt anders gemacht. Ich hab in QtService die Methode
(createApplication) reimplementiert, die das QApplication Objekt
konstruiert. Dort kann man ganz problemlos den anderen Konstruktor
aufrufen.
Danke für die ganzen Antworten.
>Du kannst auch den Basis-ctor im abgeleiteten ctor aufrufen
Das Problem war, dass eine von QApplication abgeleitete Klasse nicht als
Template für QTService verwendet werden kann - warum auch immer.
Normalerweise müsste das problemlos gehen, zumindest, solang man nicht
irgendwelche Member oder Methoden verdeckt.
Grüße,
Peter
Peter Diener schrieb:> Das Problem war, dass eine von QApplication abgeleitete Klasse nicht als> Template für QTService verwendet werden kann - warum auch immer.
Wie bist du denn auf die Idee gekommen, daß man das nicht kann?
>Wie bist du denn auf die Idee gekommen, daß man das nicht kann?
Es gab eine Fehlermeldung, dass die Klasse, die ich verwendet habe,
dafür nicht geeignet ist. Dabei hab ich nichts anderes gemacht, als
genau von der Klasse abgeleitet, die als Template funktioniert. Nichts
zusätzlich deklariert oder überladen.
Ich hab das leider gerade nicht hier. Vielleicht hab ich ja irgendwas
falsch gemacht, obwohl man daran eigentlich nicht viel verkehrt machen
kann.
Ist auch nicht so wichtig, ich habs ja jetzt anders gelöst. Bei
Gelegenheit werd ich nochmal versuchen, das Verhalten nachzuvollziehen.
Grüße,
Peter