Diverse QT-Connects funktionieren nicht

Alles rund um die Programmierung mit Qt
Antworten
IWL
Beiträge: 18
Registriert: 13. Juli 2009 01:45

Diverse QT-Connects funktionieren nicht

Beitrag von IWL »

Hallo Leute,

ich habe unter QT das Problem, daß diverse Connects nicht funktionieren, oder funktionieren, aber zur Laufzeit kommen Fehlermeldungen es könnte nicht verbunden werden, geht aber trotzdem - ist unheimlich.
Selbstversändlich sind die Signale und Slots dokumentiert und finden sich auch in diesen Auswahllisten, die sich beim Quelltext editieren automatisch öffnen.

Zur Zeit habe ich z.B. das Problem, daß ich gerne zum Signal destroyed eines QDialogs verbunden hätte, das auch klar dokumentiert ist, ich habe dazu im QTCreator auf den Dialog rechtsgeklickt - got to Slot, da ist auch ein Slot für destroyed erzeugt worden, wird aber nie aufgerufen und zur Laufzeit kommt no Matching Signal, obwohl er das selbst gemacht hat.

Was ist die Ursache für diese Probleme?

Ansonsten habe ich in den Signal/Slot-Verbindungs-Editor im QTCreator / Designer noch nie was sehen und editieren können.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wie sieht der connect aus und was ist die genaue Fehlermeldung. Und was meinst du damit, daß es obwohl es nicht verbunden ist, trotzdem geht?
IWL
Beiträge: 18
Registriert: 13. Juli 2009 01:45

Beitrag von IWL »

Ich habe mal ein Projekt erzeugt um das mit dem QDialog finished zu demonstrieren, ist angehangen.
Ich habe das finished mit dem QtCreator ui-Editor go to Slot erzeugt.

Ich habe bei anderen Sachen das Problem, daß solche Meldungen auch kommen, die Funktion(SLOT) aber doch aufgerufen wird.
Dateianhänge
FinishedTest.zip
(1.38 KiB) 143-mal heruntergeladen
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Dieses 'Beispiel'-Projekt hat nichts mit deinem Problem zu tun...
IWL
Beiträge: 18
Registriert: 13. Juli 2009 01:45

Beitrag von IWL »

Ehrlich gesagt verstehe ich das nun überhaupt nicht.

In meinem Ursprungspost sprach ich zwar von destroyed und demonstriert habe ich es mit finished, aber es ist bei beiden und noch viel mehr Messages so.

Die Probleme habe ich sowohl auf nem XP-Laptop als auch ner Linux-Workstation, die von Eclipse, Qt und OpenOffice mal abgeshen nichts miteinander zu tun haben.

Geht das bei anderen?
chrislo1976
Beiträge: 105
Registriert: 24. Februar 2008 09:45

Beitrag von chrislo1976 »

Hallo!

Ich denke mal dass du die "Auto-Connects" nicht für den Dialog selbst, sondern nur für dessen Child-Objekte verwenden kannst.

In setupUI() wird ja die Methode

Code: Alles auswählen

connectSlotsByName
aufgerufen die dann die "echten" Connects durchführt. In der Hilfe liest man dazu:
void QMetaObject::connectSlotsByName ( QObject * object ) [static]

Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form:
...
Ich verstehe dass so, dass wie gesagt, NUR die Child-Objekte auf diese Weise verbunden werden können. Hab testweise eine PushButton in dein Formular eingefügt, und das geht.

Die Verbindung kannst du aber jederzeit so bewerkstelligen:

Code: Alles auswählen

connect(this, SIGNAL(finished(int)), this, SLOT(slot_Dialog_finished(int)));
HTH
Christian
IWL
Beiträge: 18
Registriert: 13. Juli 2009 01:45

Beitrag von IWL »

Ja das hat mir freundlicherweise in qtforum.org schon jemand erklärt.

Das ist dann aber je nach Sichtweise ein Bug im Creator oder Qt, daß ich das Signal im Creator-Designer wählen kann und die Slot-Funktion erzeugt wird, es zur Laufzeit dann aber nicht geht, man muss wohl diese Funktion in der Moc überarbeiten, habe den Feedback-Button im Creator benutzt.

Die anderen Sachen rührten dann daher, daß ich meine händischen Slots auch on_xyz genannt habe, was dazu führt, daß da diese connect-Automatismen im moc drauf anspringen und das geht dann schief, während die händischen connects trotzdem funktionieren.
Antworten