Qt C++ Constructor reimplementieren

Persönliche Seite #2412855
Lesenswert?

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, bool GUIenabled)

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
Persönliche Seite #2412926
Lesenswert?

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);
Gast #2412991
Lesenswert?

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
 class myApp : public QApplication
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.
Persönliche Seite #2414043
Lesenswert?

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
Persönliche Seite #2417006
Lesenswert?

>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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren