Eigene Slots
-
stefan-tiger
- Beiträge: 49
- Registriert: 28. März 2006 22:52
Eigene Slots
Hallo,
haba mal angefangen mit KDevelop usw. was zu machen und bin jetzt aber auf reines Qt 4.1.1 mit dem Designer umgestiegen, da die Anwendung auch auf Windows laufen soll.
Leider hab ich noch nicht herausgefunden wie ich eigene Slots mit dem Designer machen kann.
Ich hab jetzt einen Button, der hat das Sinal clicked() und ich verbinde es mit dem Formular-Widget mit einem eigenen Slot.
So hab ichs bisher immer gemacht. Aber wie leg ich nun so einen unte rdem "neuen" Designer an?
haba mal angefangen mit KDevelop usw. was zu machen und bin jetzt aber auf reines Qt 4.1.1 mit dem Designer umgestiegen, da die Anwendung auch auf Windows laufen soll.
Leider hab ich noch nicht herausgefunden wie ich eigene Slots mit dem Designer machen kann.
Ich hab jetzt einen Button, der hat das Sinal clicked() und ich verbinde es mit dem Formular-Widget mit einem eigenen Slot.
So hab ichs bisher immer gemacht. Aber wie leg ich nun so einen unte rdem "neuen" Designer an?
-
stefan-tiger
- Beiträge: 49
- Registriert: 28. März 2006 22:52
Warum das denn?Volker hat geschrieben:Ohne absolute Gewissheit glaube ich, dass das mit dem neuen Designer nicht möglich ist
Und wie mach ich es sonst?
Ich habe eine Klasse die von der ui.Klasse abgeleitet ist.
Habe in der abgeleiteten Klasse einen eigenen Slot hinzugefügt und dann im Konstruktor der abgeleiteten Klasse den "connect" gemacht. Funktioniert aber nicht.
So sollte es gehen, mit dem komischen Verhalten, daß der Designer 4.x keine eigenen Slots zuläßt. Wie man das direkt umgehen kann, weiß ich auch nicht.Ich hab jetzt einen Button, der hat das Sinal clicked() und ich verbinde es mit dem Formular-Widget mit einem eigenen Slot.
Die connect Methode ist die zweite Variante, warum die bei dir nicht geht,...???
Außerden gibt es noch die on_<widget>_<action> methode.
Dazu erzeugst du einen private slot mit eben dieser Form. Also zB ein Button namens btnPush bekommt einen Slot on_btnPush_clicked().
Die Funktion wird automatisch aufgerufen, wenn das entsprechende signal (hier clicked()) gesendet wird.
-
stefan-tiger
- Beiträge: 49
- Registriert: 28. März 2006 22:52
Verzweifelt..
... poste ich mal mein Quellcode.
Ich versteh nicht warum der "connect" nicht funktioniert.
Siehe Anhang, mit Übersetzungsscript "build.sh".
Gruß
Ich versteh nicht warum der "connect" nicht funktioniert.
Siehe Anhang, mit Übersetzungsscript "build.sh".
Gruß
- Dateianhänge
-
- quba_2006-03-29_01.tar.gz
- Button "btnStartGame" funktioniert nicht mit dem "connect"
- (27.4 KiB) 224-mal heruntergeladen
-
stefan-tiger
- Beiträge: 49
- Registriert: 28. März 2006 22:52
Ok, hab den Button nun in Gang bebracht. Allerdings verstehe ich nicht warum ich den "connect" nur von ausserhalb und nicht im Konstruktor der Widget-Klasse (die von der ui-Widget-Klasse abgeleitet ist) machen kann.
Würde mcih freuen wenn mir das jemand erklärt.
Code im Anhang.
Würde mcih freuen wenn mir das jemand erklärt.
Code im Anhang.
- Dateianhänge
-
- quba_2006-03-29_02.tar.gz
- Hier gehts, allerdings ist der "connect" nicht da wo ich ihn ursprünglich haben wollte.
- (30.85 KiB) 230-mal heruntergeladen
Wo ist das denn dokumentiert? Ich habe das nicht gefunden und würde mir enorm helfen...michams hat geschrieben:... Außerden gibt es noch die on_<widget>_<action> methode. ....
Hallo Stefan
Ich würde qubawidgetbase.h direkt in quba einbinden und nicht über einen Umweg machen. Aber das ist geschmacksache.stefan-tiger hat geschrieben:... Allerdings verstehe ich nicht warum ich den "connect" nur von ausserhalb und nicht im Konstruktor der Widget-Klasse (die von der ui-Widget-Klasse abgeleitet ist) machen kann....
Ich habe leider dein Code nicht zum Laufen gebracht da es irgendwo abstürtzt.
So wie ich das sehe, initialisierts du qubaWidget nicht mit einem new. Daher wird der Construct nicht ausgeführt.
Win 2k, Win XP
QT Win Opensource 4.1.1
MinGW 3.4.2
QT Win Opensource 4.1.1
MinGW 3.4.2
Such im Assistenten mal nach "on_" oder "Auto-Connect". Da sollte ein Eintrag auftauchen "Using a Component in Your Application" dort drin ganz unten.Wo ist das denn dokumentiert? Ich habe das nicht gefunden und würde mir enorm helfen...
Außerdem gibt es im QMetaQbject die Funktion "connectSlotsByName", da steht ein wenig drin.
Im Prinzip mußt du nur die Slot Funktion nach dieser Methode anlegen, den Rest mach der moc. Soweit ich weiß, geht das für so ziemlich alle Widgets und Signale.
-
stefan-tiger
- Beiträge: 49
- Registriert: 28. März 2006 22:52
Nein, ich will noch eine Zwischenstufe, da sich "qubawidgetbase.h" ständig ändert. Ich änder ständig die GUI mit dem Designer und in meinem Build-Script übersetzt mit dem uic auch immer neu.michams hat geschrieben:
Ich würde qubawidgetbase.h direkt in quba einbinden und nicht über einen Umweg machen. Aber das ist geschmacksache.
Ich habe leider dein Code nicht zum Laufen gebracht da es irgendwo abstürtzt.
So wie ich das sehe, initialisierts du qubaWidget nicht mit einem new. Daher wird der Construct nicht ausgeführt.
Im Anhang findest du eine aktuelle Version, die auch unter Windows geht (habs selbst getestet), mit einer "build.bat".
Mit dem Initialisieren liegst du falsch, denn ein Konstruktor wird immer ausgeführt wenn ein Objekt erzeugt wird, egal wie. Unter Linux sieht du das wegen den "cout"-Aufrufen, die seltsamerweise unter Windows nicht gehen (genausowenig wie die QDebug-Aufrufe).
Also geklärt ist die Sache damit noch nicht.
- Dateianhänge
-
- quba_2006-03-29_03.zip
- Geht unter Linux und Windows. Mit bulid-Scripte jeweils.
- (138.86 KiB) 209-mal heruntergeladen
Ja, da hast du recht, ich habe falsch geschaut.stefan-tiger hat geschrieben:...Mit dem Initialisieren liegst du falsch....
Aber scheinbar kann ich dir da leider nicht weiterhelfen, da ich die Ui anders einbinde (ohne Umweg obschon ich auch den Designer verwende) und ich statt mit QWidget mit QDialog arbeite. Daher sieht bei mir der Construct auch etwas anders aus.
Aber ich schaue mal weiter. Vielleich komme ich noch drauf...
Übrigens habe ich meine QT 4.1.1 Obensource ins VS C++ 2005 Express eingebunden und da geht qDebug zum Glück
Win 2k, Win XP
QT Win Opensource 4.1.1
MinGW 3.4.2
QT Win Opensource 4.1.1
MinGW 3.4.2
Das funktioniert wirklich ausgezeichnet, cool 8)michams hat geschrieben:Außerden gibt es noch die on_<widget>_<action> methode.
Dazu erzeugst du einen private slot mit eben dieser Form. Also zB ein Button namens btnPush bekommt einen Slot on_btnPush_clicked().
Die Funktion wird automatisch aufgerufen, wenn das entsprechende signal (hier clicked()) gesendet wird.
Ich werde mein Projekt gelegendlich umstellen.
@stefan-tiger
Vielleich währe das die schönere Lösung, als sich mit Connect herumzuschlagen?
Win 2k, Win XP
QT Win Opensource 4.1.1
MinGW 3.4.2
QT Win Opensource 4.1.1
MinGW 3.4.2
Näää. Ich nutze das überhaupt nicht, da man es nicht debuggen kann. Du hast einen Tippfehler im Prozedurnamen oder die Parameter stimmen nicht überein. Schon wird dein Slot nie aufgerufen, aber finde das mal.Adi hat geschrieben:Vielleich währe das die schönere Lösung, als sich mit Connect herumzuschlagen?
Dann hat man oft eigene Connections und schon hätte man ein Mischmasch aus manuell und automatisch erstellten Connections. Nee, da mache ich das lieber selbst.
-
stefan-tiger
- Beiträge: 49
- Registriert: 28. März 2006 22:52
Wo ist denn da der Unterschied? Breakpoint reinsetzen und schauen, ob er aufgerufen wird. Falls nicht, stimmt wohl was nicht und so viele Fehlerquellen gibt's da nun auch wieder nicht, als daß man tagelang herumstochern könnte, bevor man merkt, daß der Name nicht ganz stimmt.macman hat geschrieben: Näää. Ich nutze das überhaupt nicht, da man es nicht debuggen kann. Du hast einen Tippfehler im Prozedurnamen oder die Parameter stimmen nicht überein. Schon wird dein Slot nie aufgerufen, aber finde das mal.
Und ob ein Slot auch wirklich aufgerufen wird, ist doch eigentlich das erste, was man nach dem Einbauen testet, egal wie er connected wurde.