Seite 1 von 1
Klasse mit Q_OBJECT
Verfasst: 2. August 2006 19:44
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:
sonder nur:
Re: Klasse mit Q_OBJECT
Verfasst: 2. August 2006 20:53
von OscarWild
warum denn nicht einfach
?
Verfasst: 2. August 2006 20:55
von upsala
Was meinst du mit 'geht nicht'?
'new' ist nur erforderlich wenn kein parent angegeben wird.[/quote]
Verfasst: 2. August 2006 21:26
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....
Verfasst: 2. August 2006 21:35
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...

Verfasst: 2. August 2006 21:48
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...
Verfasst: 2. August 2006 22:52
von Christian81
Wie kann man hoffen von einer Klassen signals zu bekommen wenn man sie gelöscht hat?
Verfasst: 2. August 2006 23:02
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.
Verfasst: 4. August 2006 07:51
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?