Alle Signals auflisten?

Alles rund um die Programmierung mit Qt
Antworten
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

Alle Signals auflisten?

Beitrag von phlox81 »

Ich suche eine möglichkeit, alle Signals aufzulisten.
Ungefähr so stelle ich mir das vor:

Code: Alles auswählen

QStringList signals = getSignals();
Alternativ würde mich interessieren, ob diese irgendwo aufgelistet sind.

phlox
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

mir ist keine methode bekannt, die dir die signale liefert.
maximal die von moc generierten files (moc_filename.cpp) koennte man durchsehen, da stehen sie (am ende glaube ich) drin.

vllt. gibts aber auch was viel schoeneres.

mfg,
julian
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

-=Freaky=- hat geschrieben:vllt. gibts aber auch was viel schoeneres.
Gibt es, wird sind hier bei Qt :P
QObject::metaObject() -> QMetaObject.
Da gibt es ein methodCount() und method(int index).
Das zusammenfügen in ner Schleife und nach dem QMetaMethod::methodType() fragen ;)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Hier gehts los:

Code: Alles auswählen

const QMetaObject * QObject::metaObject () const 
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

Beitrag von phlox81 »

upsala hat geschrieben:Hier gehts los:

Code: Alles auswählen

const QMetaObject * QObject::metaObject () const 
Das habe ich auch gesehen, liefert das alle Signals/slots, oder nur für diese eine klasse die Signals/Slots?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Natürlich nur für eine Klasse. Was sollte es sonst für einen Sinn machen?
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

Beitrag von phlox81 »

Also das habe ich jetzt:

Code: Alles auswählen

void getSignals(QStringList& signallist,const QMetaObject* obj, QMetaMethod::MethodType methodtype)
{
    int size = obj->methodCount();
    for(int i = 0; i < size; ++i)
    {
        QMetaMethod m = obj->method(i);
        if(m.methodType() == methodtype && !signallist.contains(m.signature()))
            signallist.append(m.signature());
    }
}
Allerdings würde ich nachwievor gerne ALLE Signals haben. Will jetzt aber nicht ALLE Klassen instanzieren (Momentan sind das nur 4 Aufrufe mit QPushButton, LineEdit, ComboBox und Label).
Das gibt zwar schon ne menge, aber so richtig glücklich macht das mich natürlich nicht ;)

phlox
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du bekommst doch alle Signale eines Objektes. Egal ob du es als QObject übergibst oder z.B. als QLabel.

Oder willst du alle Signale, aller Objekte deiner Anwendung?
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

Beitrag von phlox81 »

upsala hat geschrieben:Du bekommst doch alle Signale eines Objektes. Egal ob du es als QObject übergibst oder z.B. als QLabel.

Oder willst du alle Signale, aller Objekte deiner Anwendung?
Jein. Ich will eigentlich eine Liste der "Standard Signale", ich brauche dies für meinen Codegenerator, um entsprechende SLOT(_signalname_) Elemente generieren zu können.

Arbeite gerade an einem Plugin der Code für Qt 4.6 generiert.
Antworten