Wie kann ich einen benutzerdefinierten Schlitz in Qt4 Designer erstellen?
-
03-07-2019 - |
Frage
Jedes Mal, wenn ich das Signal / Slot-Editor Dialogfeld verwenden, habe ich aus der bestehenden Liste von Slots zur Auswahl. Die Frage ist also, wie kann ich einen benutzerdefinierten Namen Slot erstellen?
Lösung
Leider ist dies nicht möglich, in Qt4.
In Qt3 Sie benutzerdefinierte Slots erstellen können, die dann in der ui.h-Datei implementiert, wo. Allerdings ist Qt4 nicht diese Datei verwenden, so benutzerdefinierte Slots nicht unterstützt werden.
Es gibt einige Diskussionen über dieses Thema über QtForum
Andere Tipps
Dies scheint in der Version von Qt Designern 4.5.2 möglich zu sein, aber es nicht aus dem Signal / Slot-Editor Dock-Widget im Hauptfenster durchgeführt werden.
Das ist was für mich gearbeitet
- Schalter href="http://doc.qt.io/qt-4.8/designer-connection-mode.html" rel="noreferrer"> bearbeiten Signale / Slots Modus (F4), um
- Drag & Drop aus dem Widget, das das Signal, auf das Widget zu emittieren, die das Signal zu empfangen ist.
- A Verbindung konfigurieren Dialog erscheint, die Signale für die emittierende Widget zeigt, und die Schlitze für das empfangende Widget. Klicken Sie auf Bearbeiten ... unterhalb der Schlitze Spalte auf der rechten Seite.
- A Signale / Slots von ReceivingWidget Dialog erscheint. Hier ist seine möglich, das Plus-Symbol klicken, um unter Slots einen neuen Slot beliebigen Namen hinzuzufügen.
- Sie können dann gehen Sie zurück und in der Verbindung konfiguriert Dialog oder in der Tat in dem Signal / Slot-Editor zu Ihrem neuen Slot verbinden dockwidget wieder im Hauptfenster.
Vorab: Ich bin mit PyQt, und ich habe versucht, nur Schlitze auf diese Weise von Python hinzugefügt zu verwenden, nicht von C ++, so dass Ihre Ergebnisse können variieren ...
rechts auf dem Hauptfenster klicken und „Änderungssignale und Slots“ auswählen und einen neuen Slot hinzuzufügen. Es wird in Ihrem Signal-Slot-Editor angezeigt werden.
Ich bin in der Lage, es zu tun durch:
In MainWindow.h, fügen Sie die Zeile:
public slots:
void example();
in der Mainwindow-Klasse.
In mainwindow.cpp
void MainWindow::example() {
<code>
}
Dies scheint nicht möglich, auf einfache Art und Weise zu sein.
Der Designer können Sie nur bestehende Widgets Ihre eigenen Widgets fördern. doch ist es nicht zulässt, dass Sie die Signale und Slots der Klasse gefördert Widgets verbinden.
Die Art und Weise dies möglich ist, ist ein Plugin für den Designer zu schaffen wie hier beschrieben und auf den Seiten, die ihm folgen.
Der normale Verlauf der Aktion ist ein Widget auf Ihre eigene Klasse zu fördern und sie dann in Ihrem eigenen Code manuell zu verbinden. Dieser Prozess wird beschrieben hier
Es ist nicht möglich, es zu tun, weil es bedeutet, würden Sie einen Schlitz zu einer bestehenden Qt-Klasse wie QPushButton
hinzufügen, die nicht wirklich der Weg zu gehen.
Sie sollten Ihre eigenen QWidget
schließlich durch Subklassen einer vorhandenen erstellen. Dann Integration es in Qt Designer als Plugin wie vorgeschlagen. Ihre eigene Klasse ermöglicht es Ihnen, die Signale / Slots zur Verfügung hinzufügen / modifizieren, wie Sie wollen.
Sie über die Schlitz Auto-Verbindungsfunktionen nicht vergessen. Es gibt ein paar Nachteile, wie mit Ihrer Funktion umbenennen, wenn Sie Ihren Widget umbenennen, aber wir verwenden diejenigen viel in meinem Unternehmen.
Sie können den Zauber-Slot-Format von verwenden
void on_objectName_signal() {
// slot code here, where objectname is the Qt Designer object name
// and the signal is the emission
}
Die Verbindung zu dieser Methode wird durch das Verfahren hergestellt connectSlotsByName und immer dann, wenn das Signal ausgesendet wird, wird dieser Schlitz aufgerufen.
Vielleicht wird es helfen.
Standardmäßig haben Sie aus der bestehenden Liste von Slots zur Auswahl. Aber Sie können Slot durch einen Rechtsklick fügen Sie in der Liste auf der rechten Seite von Designer-Objekt und wählen Sie „Slot / Signale“ und fügen Sie Ihren eigenen Slot / Signal. Danach werden Sie es in Signal / Slot-Editor wählen.
Klicken Sie auf das Widget mit der rechten Taste
fördern das Widget in eine Klasse, die Sie definiert
Klicken Sie auf das Widget mit der rechten Taste wieder
werden Sie dieses Signal sehen und Schlitz ist editierbar