Klasse mit Q_OBJECT

Alles rund um die Programmierung mit Qt
Antworten
Mati
Beiträge: 66
Registriert: 4. Januar 2006 00:11

Klasse mit Q_OBJECT

Beitrag von Mati »

Hallo,
ich habe eine frage:

wenn ich eine klasse habe die so aussieht:

Code: Alles auswählen

class Class1: public QObject
{
    Q_OBJECT
    public:
          Class1();
...

}
muss ich dann zwangsläufig wenn ich in einer anderen Klasse Class2
nun ein Objekt der Klasse Class1 haben will auf dem Heap alloziieren?

Sowas geht bei mir nicht dann:

Code: Alles auswählen

Class1 c = Class1::Class1();
sonder nur:

Code: Alles auswählen

Class1 *c = new Class1();
OscarWild
Beiträge: 54
Registriert: 19. Juni 2006 19:59

Re: Klasse mit Q_OBJECT

Beitrag von OscarWild »

Mati hat geschrieben:

Code: Alles auswählen

Class1 c = Class1::Class1();
warum denn nicht einfach

Code: Alles auswählen

Class1 c;
?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Was meinst du mit 'geht nicht'?

'new' ist nur erforderlich wenn kein parent angegeben wird.[/quote]
Mati
Beiträge: 66
Registriert: 4. Januar 2006 00:11

Beitrag von Mati »

hmm ja ich hab eben kein Parent angegeben weil das einfach nur Klassen sind die nur deshalb QObject ableiten weil sie signale senden.

Also ich habe eine Klasse die NUR deshalb von QObject ableitet weil sie Signale sendet.
Eine andere Klasse will eben diese Signale auffangen um sie zu connecten.
In dieser klasse schreibe ich ganz einfach:

Code: Alles auswählen

Class *c = new Class();

connect(c,SIGNAL(signal), this, SLOT(slot);

delete c;
leider funktioniert es so nicht...es passiert gar nichts. Er läuft dadruch nicht in den slot der eigenen klasse....
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Mati hat geschrieben: leider funktioniert es so nicht...es passiert gar nichts. Er läuft dadruch nicht in den slot der eigenen klasse....
Wie kann man bei diesen Code auch nur hoffen das da was passiert... :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Mati
Beiträge: 66
Registriert: 4. Januar 2006 00:11

Beitrag von Mati »

hmm grosse Hilfe danke

das delete ist nicht das was den code daran hindert dass er reinläuft in die slots...

und die fehlende abschliessende klammer ist im code natürlich vorhanden...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie kann man hoffen von einer Klassen signals zu bekommen wenn man sie gelöscht hat?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Mati
Beiträge: 66
Registriert: 4. Januar 2006 00:11

Beitrag von Mati »

in Ordnung:
so wies da steht ist es blödsinn!

dies sollte aber natürlich nur zum verständnis dienen:

hier etwas anders:

Code: Alles auswählen

Class *c = new Class(); 
 
connect(c,SIGNAL(sgl_method()), this, SLOT(slt_method()); 

c->method1(); //Hier wird z.B in einer for-schleife ständig das signal
                     //emit sgl_method(); aufgerufen!
 
delete c; 

...

void BaseClass::slt_method()
{
     std::cout << "hier" << std::endl;
}
damit würde doch VOR dem delete die ausgabe erscheinen....

leider tuts so nicht. Auch wenn ich ohne Heap-Alloziierung arbeite und OHNE delete...
die klasse c erbt nur von QObject und kompilieren tuts auch...nur eben läuft er nicht in den slot.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Hast Du schonmal geschaut ob während der Laufzeit evtl. irgendwelche Warnungen von nichtgefundenen Signals/Slots ausgegeben werden? Oder schonmal ein wenig mit dem debugger rumgespeilt?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten