Wie implementiere ich ein Signal / Slot, das in Qt Designer definiert wurde?

8

Ich versuche, das click () - Signal eines Buttons mit meiner eigenen Funktion zu verbinden. Die Schaltfläche befindet sich in einem Widget, das ich mit QT Designer erstellt habe. Ich lade die .ui-Datei mit QUiLoader wie folgt:

%Vor%

Ist dies der richtige Weg, um mit dem geklickten () Signal zu verbinden? Ich sehe, dass ich Signale und Slots direkt in Qt Designer verkabeln kann, aber wie bereite ich mich vor und komme zu solchen Verbindungen im Code? Nebenfrage: Der obige Code funktioniert, aber das Hauptfenster wird in der falschen Größe angezeigt. Wie stelle ich sicher, dass es in der richtigen Größe angezeigt wird? Sollte ich dies mit minimalen Höhen- / Breitenbeschränkungen tun?

    
Sven 05.01.2012, 16:23
quelle

1 Antwort

12

Verwenden Sie den Bearbeitungsmodus für Signale und Slots , um vordefinierte Qt-Signale direkt mit dem vordefinierten Qt zu verbinden Schlitze.

Wenn Sie also in einem einfachen Dialog auf die Schaltfläche "Schließen" klicken, können Sie einfach eine Verbindung von der Schaltfläche zum Dialogfeld ziehen, das clicked() -Signal und den reject() -Slot auswählen und auf "OK" klicken mehr zu tun.

Für Signale und / oder Slots, die Sie selbst definieren möchten, müssen Sie vorher nichts in Designer "vorbereiten". Alles sollte in Ihrem eigenen Code erfolgen.

Ihr Beispiel zeigt das schon ziemlich gut, aber die Verbindung könnte viel einfacher und sauberer gemacht werden, so:

%Vor%

Was Ihr Hauptfenster mit der "falschen Größe" betrifft: Es ist schwer anhand des angezeigten Codes zu erkennen, aber möglicherweise haben Sie in dem Widget, das Sie laden, kein Layout festgelegt.

Übrigens: Gibt es einen bestimmten Grund, warum Sie QUiLoader verwenden? Das Kompilieren von Python-Modulen mit pyuic4 ist viel flexibler und Sie können viel von dem generierten Code lernen.

BEARBEITEN

Wenn Sie ein Layout auf dem Hauptformular festlegen, wird das Problem der Größenänderung behoben.

Wenn Sie nicht wissen, wie das geht: Klicken Sie im Designer mit der rechten Maustaste auf einen leeren Teil des Hauptformulars und wählen Sie Layout/Layout in a Grid aus dem Menü (es gibt auch eine Schaltfläche in der Symbolleiste).

Sobald Sie das getan haben, wird die Größe des Formulars automatisch so angepasst, dass es zu den enthaltenen Widgets passt.

    
ekhumoro 05.01.2012, 20:10
quelle