object creation event ?

Alles rund um die Programmierung mit Qt
Antworten
aroash
Beiträge: 4
Registriert: 23. März 2006 11:45

object creation event ?

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Es gibt kein solches Signal oder ein solches Event und wir sprechen hier deutsch...
aroash
Beiträge: 4
Registriert: 23. März 2006 11:45

Beitrag 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 !
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

deutsch
Ok, ich habs mir nochmal genauer angeschaut. Es gibt da

Code: Alles auswählen

QEvent::ChildAdded
QEvent::ChildRemoved
Du könntest versuchen mithilfe von

Code: Alles auswählen

QWidget::event(QEvent *)
oder

Code: Alles auswählen

void QObject::installEventFilter (QObject *filterObj)
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

Code: Alles auswählen

QEvent::ChildAdded
QEvent::ChildRemoved
You could try to catch this events with

Code: Alles auswählen

QWidget::event(QEvent *)
or

Code: Alles auswählen

void QObject::installEventFilter (QObject *filterObj)
But I haven't tested this till yet. Another possibility would be to catch the showEvent's if the objects all QWidgets.
aroash
Beiträge: 4
Registriert: 23. März 2006 11:45

Beitrag 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 ?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du mußt für jedes Child einen Eventfilter installieren...
andiK
Beiträge: 27
Registriert: 23. September 2005 20:29
Wohnort: Bruchsal

Beitrag 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 :roll: ?

cheers, Andi
aroash
Beiträge: 4
Registriert: 23. März 2006 11:45

Beitrag 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...
Antworten