Seite 1 von 1
object creation event ?
Verfasst: 23. März 2006 11:51
von aroash
Hi,
Can someone tell me if there is a signal or an event which is sended when an object is created in the application ?
Because I want my main class to be alerted when a new object / widget is created or shown on the screen
thks
Verfasst: 24. März 2006 21:54
von upsala
Es gibt kein solches Signal oder ein solches Event und wir sprechen hier deutsch...
Verfasst: 27. März 2006 09:54
von aroash
Danke aber ich bin französisch und ich sprache nicht gut deutsch...
Und niemand hat meine frage geantworten in US oder FR forums...
Ich will erproben...
Haben Sie eine Idea für meine Probleme :
Ich habe eine method in eine librairy (was ich habe programmiert) und ich will, für jedes QWidget was ist instanziert in meine applikation, dieses method zu applizieren.
Aber ich will, dass der Appell an meine method automatisch sein wann eine neue QWidget instanziert ist...
Ich hoffe Sie verstehen mich...
Danke schön !
Verfasst: 27. März 2006 10:21
von upsala
deutsch
Ok, ich habs mir nochmal genauer angeschaut. Es gibt da
Du könntest versuchen mithilfe von
oder
diese Events abzufangen. Ob es allerdings funktioniert habe ich nicht versucht. Alternativ wäre noch die Möglichkeit, da es sich ja anscheinend um QWidget's zu handeln scheint, das showEvent abzufangen.
english
Ok, I have looked at it again. There are
You could try to catch this events with
or
But I haven't tested this till yet. Another possibility would be to catch the showEvent's if the objects all QWidgets.
Verfasst: 27. März 2006 11:23
von aroash
Ja ich habe an das gedenkt. Aber es gibt eine Probleme : QEvent::ChildAdded oder ChildRemoved ist emittiert erst wann einen direkt kind ist instanziert. Zum Beispiel :
class Etwas
{
Etwas::Etwas()
{
QWidget *wid = new QWidget(this) // will be catched
QWidget *widChild = new QWidget(wid) // WILL NOT BE CATCHED !!
}
bool Etwas::event(QEvent *event)
{
if (event->type() == QEvent::ChildAdded)
{
QObject* theAddedChild = event->child();
MY_FUNCTION(theAddedChild);
}
else
return QWidget::event(event);
}
Und QEvent::ShowEvent ist sehr bizarr : es gibt keine method child() auf dem objekt QShowEvent *event um einen "pointer" auf dem objekt was ist angezeigt zu bekommen.
Vielleicht muss ich das method "event(QEvent* e)" in QObjekt oder QWidget class implementieren ?
Verfasst: 27. März 2006 23:09
von upsala
Du mußt für jedes Child einen Eventfilter installieren...
Verfasst: 28. März 2006 07:53
von andiK
wenn es abgeleitete Widget-Klassen sind, warum nicht einfach ein eigenes Signal definieren und es im Konstruktor emitten? Oder wäre das zu einfach

?
cheers, Andi
Verfasst: 29. März 2006 14:27
von aroash
ja upsala es möglich. Aber das Probleme ist identisch :
QWidget* wid = new QWidget(this) // catched by 'this' event handler
QWidget* widChild = new QWidget(wid) // not catched, so :
widChild->installEventFilter(myFilter); // und myFilter will MY_FUNCTION appellieren wann der Objekt ist instanziert
Ich muss die method 'installEventFilter' appellieren für jedes widget (ausser für direkt kinden). Das ist ziemlich dasselbe meine method für jedes widget appellieren :
QWidget* widChild = new QWidget(wid)
widChild->MY_FUNCTION(myFilter);
-----------------------------------------------------------------------------------
andiK,
Das kann ich möglich tun erst für meinen Klassen. Aber es ist unmöglich für einen Objekt wie QProgessDialog, weil ich muss die Qt QProgressDialog Konstruktor modifizieren. Und ich will das nicht machen...