> 백엔드 개발 > C++ > Qt 5에서 과부하된 신호와 슬롯을 연결하는 방법은 무엇입니까?

Qt 5에서 과부하된 신호와 슬롯을 연결하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-12 15:16:11
원래의
535명이 탐색했습니다.

How to Connect Overloaded Signals and Slots in Qt 5?

Qt 5에서 오버로드된 신호와 슬롯 연결

포인터-멤버를 사용하여 Qt 5에서 오버로드된 신호와 슬롯을 연결하려고 할 때 함수 구문을 사용하면 개발자에게 컴파일 오류가 발생할 수 있습니다. 이 문제를 해결하려면 문제를 이해하고 적절한 솔루션을 적용해야 합니다.

오버로드된 신호 및 슬롯 문제

QSpinBox와 같은 오버로드된 신호 및 슬롯: :valueChanged(int) 및 QSpinBox::valueChanged(QString)는 연결할 때 혼란을 일으킬 수 있습니다. 사용할 오버로드를 명시적으로 지정하지 않고 신호에 연결하려고 하면 문제가 발생합니다.

Qt 5.7 이상에 대한 솔루션

Qt 5.7부터 Qt는 도우미를 제공합니다. 원하는 신호 과부하를 선택하는 기능입니다. 오버로드된 신호를 지정하려면 다음과 같이 qOverload 함수를 사용하십시오.

connect(spinBox, qOverload<int>(&QSpinBox::valueChanged),
        slider, &QSlider::setValue);
로그인 후 복사

Qt 5.6 및 이전 버전에 대한 솔루션

Qt 5.7 이전 버전의 경우 명시적으로 캐스팅 다음을 사용하여 올바른 유형으로 신호를 보냅니다. static_cast:

connect(spinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
        slider, &QSlider::setValue);
로그인 후 복사

못생긴 해결 방법

static_cast 접근 방식은 효과적이지만 우아함과는 거리가 멀습니다. 대신 다음 C 11 코드 조각을 사용해 보세요.

template<typename... Args> struct SELECT {
    template<typename C, typename R>
    static constexpr auto OVERLOAD_OF( R (C::*pmf)(Args...) ) -> decltype(pmf) {
        return pmf;
    }
};
로그인 후 복사
connect(spinBox, SELECT<int>::OVERLOAD_OF(&QSpinBox::valueChanged), ...)
로그인 후 복사

Qt 5.7 도우미 함수

Qt 5.7에서는 프로세스를 간소화하기 위해 도우미 함수를 도입했습니다. 기본 도우미는 qConstOverload 및 qNonConstOverload와 같은 추가 옵션이 있는 qOverload입니다.

문서 참고

Qt 5.7 이상에서 오버로드된 신호에 대한 문서는 다음의 예를 명시적으로 제공합니다. 도우미 기능을 사용하여 각 오버로드에 연결하는 방법. 구체적인 지침은 설명서를 참조하세요.

위 내용은 Qt 5에서 과부하된 신호와 슬롯을 연결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿