한국어
Qt
 

때로는 시그널과 슬롯 사이에 연결을 싱글 샷 즉, 한 번만 활성화되어야하는 것이 필요할 수 있다. 이것은 시그널/슬롯 연결이 일반적으로 작동하는 방식이 아니다. 연결이 설정되면 다음 때까지 활성 상태로 유지된다. 연결이 명시적으로 끊어졌거나 sender 객체가 삭제됐거나 receiver 객체가 삭제됐을 때.

이러한 단발성 연결이 필요하다면 어떻게해야할까? 가능한 해결책은 연결을 끊는 작은 도우미 함수 (예 : 람다)에 시그널을 연결 한 다음 이 슬롯에서 실제 슬롯을 호출하는 것이다. 다음은 예제 코드이다.

QPushButton button;
button.setText("Click Me");
button.show();

auto mySlot = [&](int v){
    qDebug() << "Real Slot." << v;
};

auto connection = std::make_unique<QMetaObject::Connection>();
auto connectionPtr = connection.get();

auto singleShot = [mySlot, connection = std::move(connection)]() {
  QObject::disconnect(*connection); // 연결을 끊는다.
  mySlot(0); // 실제 슬롯을 호출한다.
};

*connectionPtr = QObject::connect(&button, &QPushButton::clicked, std::move(singleShot));

 

단발 연결이 필요할 때마다 많은 코드를 작성해야하며 Qt를 처음 사용하는 사용자에게는 매우 까다로운 일이다.

Qt 6 에서

Qt 6에서는 싱글샷 커넥션 기능을 제공한다. QObject::connect 의 다섯 번째 인수로 전달할 수있는 편리한 Qt::SingleShotConnection 연결 플래그를 추가했다 (선택적으로 다른 연결 유형과 결합 가능). 다음은 예제 코드이다.

connect(sender, &Sender::signal, receiver, &Receiver::slot, static_cast<Qt::ConnectionType>(Qt::SingleShotConnection));

 

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 86196
59 QScopedPointer 소개 및 사용법 makersweb 2019.11.29 1033
58 QMake 프로젝트를 CMake 프로젝트로 변환 with qmake2cmake makersweb 2022.09.17 1025
57 Qt 6에서 QList 변경사항 makersweb 2020.10.08 990
56 Qt로 XML 파싱 : Qt 6에서 업데이트된 (Parsing XML with Qt: Updates for Qt 6) [1] j2doll 2020.01.16 981
55 Qt기반의 서버와 클라이언트간 SOAP(Simple Object Access Protocol) file makersweb 2020.05.11 978
54 [Qt] Google Play의 향후 요구 사항을 준수하는 방법 [2] j2doll 2019.07.29 978
53 Qt 6.0의 개발 호스트 및 대상 플랫폼 makersweb 2020.09.16 978
52 Qt MQTT 에 대해서 file makersweb 2020.06.02 962
51 QProcess 예제 (프로그램 재시작) file makersweb 2023.01.25 951
50 Qt 5.15 및 Qt 6의 출시 일정 makersweb 2020.04.09 934
49 Qt 5 코드를 Qt 6로 포팅하기 위해 도움이 되는 Clazy Framework file makersweb 2021.03.01 925
48 QML 바인딩 끊김 진단 makersweb 2020.11.08 915
47 QML 에서 QR코드 생성 file makersweb 2021.08.20 900
46 Qt로 작성된 안드로이드 APP에 Splash Screen을 추가 file makersweb 2020.03.10 885
45 Qt 응용프로그램에서 Lottie Animation사용 file makersweb 2021.05.30 885
44 Qt로 작성된 iOS 앱에서 시리얼 통신 file makersweb 2022.04.30 869
43 Qt 6의 C++ 프로퍼티 바인딩 예제 makersweb 2021.11.01 857
42 QML에서 Websocket 서버와 통신 file makersweb 2021.09.18 834
41 QPA 플러그인과 HTML5 Backend file makersweb 2017.12.27 809
40 Qt 6 에서 프로퍼티 바인딩 makersweb 2021.04.03 776