Aby podłączyć sygnały do gniazd, o ile wiem, parametry sygnału muszą odpowiadać parametrom gniazda. Tak więc na przykład:Podłącz sygnały do gniazd o stałych wartościach
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(closeDockWidget()));
ale co jeśli chcę mieć połączenie sygnału slot że ma inną ilość parametrów, ale zawsze przechodzą stałą wartość do gniazda. Na przykład, przy użyciu wyżej kawałek kodu:
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(setDockWidget(false)));
Lub innymi słowy, gdy przycisk jest wciśnięty, to wywołuje funkcję setDockWidget()
z fałszywym parametru. czy to możliwe?
Ta odpowiedź nie jest już prawidłowa, ponieważ składnia Qt5 w C++ 11 sprawia, że dość łatwo jest użyć lambda do tego celu. –
@ André, Po drugiej stronie, po prostu możesz "stworzyć proxy slot, który wywoła pożądany." Teraz na miejscu – Lol4t0
Oczywiście, możesz. Ale dodatkowy slot oznacza więcej rzeczy w nagłówku, których nie chcesz, odsłaniając połączenia zewnętrzne (tak, nawet jeśli prywatny automat może zostać wywołany z zewnątrz) i rozprzestrzenia się wokół kodu w wielu lokalizacjach. Możesz nawet potrzebować dodatkowych zmiennych składowych, aby zawierać wartości, które chcesz przekazać, wprowadzając w ten sposób dodatkowy stan w klasie. Rozwiązanie lambda jest o tyle bardziej eleganckie, że dyskwalifikuje wprowadzenie proxy jako rozwiązania IMO. –