2016-06-05 4 views
2

내가 이렇게 보이는 몇 가지 코드를 가지고 :어떻게 Qt5가 기본 매개 변수를 사용하여 슬롯에 connect()를 사용할 수 있습니다

class MyClass : public QObject 
{ 
    Q_OBJECT 

signals: 
    void SetValue(float value); 

public slots: 
    void OnSetValue(float value, bool fromDatabase = false); 
} 

connect(this, SIGNAL(SetValue(float)), this, SLOT(OnSetValue(float))); 

이 잘 작동하지만 Qt5's new signal/slot syntax 활용 (및 매크로를 제거하려면). 나는이에() 연결을 변경하는 경우 :

connect(this, &MyClass::SetValue, this, &MyClass::OnSetValue); 

I 얻기 (비주얼 스튜디오 2013 년) : 신호가

을 제공보다 슬롯이 이상의 인수가 필요합니다

오류 C2338 OnSetValue()를 호출하고 기본 매개 변수를 설정할 수 있지만 매개 변수가 낭비되는 것처럼 보이는 중간 매개 변수를 만들 수 있습니다. 이 문제를 해결하는 더 좋은 방법은 무엇입니까?

+1

Qt 위키에 따르면, 회원 기능 포인터로는 불가능합니다 : https://wiki.qt.io/New_Signal_Slot_Syntax#cons. – sim642

+2

'connect (this, & MyClass :: SetValue, [this] (float value) {OnSetValue (value);});' –

답변

2

linksim642도 제공되는 새로운 연결 구문은 "c + 11 람다 식과 함께 사용할 수 있습니다"라고 명시되어 있습니다. 약간 더 복잡하지만, 중간 기능을 추가하는 것보다 적은 코드를하고하지

connect(this, &MyClass::SetValue, [=](float value) { OnSetValue(value); }); 

여전히 컴파일 시간 확인을 제공 : 위의 예를 들어 내가 사용할 수 있었다.

Igor Tandetnik 위에서 더 버전 제공 [=]는 [이] (가치에 의하여 범위가 모든 자동 변수를 캡처 람다 가능)이 대체

connect(this, &MyClass::SetValue, [this](float value){ OnSetValue(value); }); 

을 람다의 범위를 줄이고 오류 가능성.