Um Signale mit Steckplätzen zu verbinden, müssen die Parameter des Signals, soweit ich weiß, mit den Parametern des Steckplatzes übereinstimmen. So zum Beispiel:Signale an Steckplätze mit konstanten Werten anschließen
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(closeDockWidget()));
Aber was, wenn ich ein Signal Anruf eines Schlitz haben will, die eine unterschiedliche Anzahl von Parametern, aber immer einen konstanten Wert in den Schlitz passieren. Zum Beispiel mit dem oben Stück Code:
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(setDockWidget(false)));
Oder in anderen Worten, wenn die Taste gedrückt wird, ruft es die setDockWidget()
Funktion mit dem falschen Parameter. Ist das möglich?
Diese Antwort ist nicht mehr wirklich gültig, da die Qt5-Syntax in C++ 11 es sehr einfach macht, ein Lambda für diesen Zweck zu verwenden. –
@ André, auf der anderen Seite, können Sie einfach 'Proxy-Steckplatz erstellen, die gewünschte 'anrufen wird jetzt an Ort und Stelle – Lol4t0
Sicher, Sie können. Aber ein zusätzlicher Steckplatz bedeutet mehr Dinge in Ihrem Header, die Sie nicht benötigen, indem Sie externen Anrufen ausgesetzt werden (ja, auch wenn ein privater Steckplatz von außen angerufen werden kann) und Ihren Code über mehrere Standorte verteilt. Möglicherweise benötigen Sie sogar zusätzliche Membervariablen, die Werte enthalten, die Sie übergeben möchten. Dadurch wird zusätzlicher Status in Ihrer Klasse eingeführt. Die Lambda-Lösung ist so viel eleganter, dass sie die Einführung eines Proxy-Slots als eine Lösung IMO disqualifiziert. –