Qt4 와 Qt5 의 신호 와 슬롯 의 사용 차이
GUI 인터페이스 란 결국 구성 요소 의 중첩 이다.우 리 는 창 을 만 들 고 단 추 를 위 에 놓 고 아이콘 을 위 에 놓 으 면 인터페이스 가 된다.배치 할 때 구성 요소 의 위치 가 특히 중요 합 니 다.창 이 필요 한 방식 으로 렌 더 링 할 수 있 도록 구성 요 소 를 어디 에 두 어야 합 니까?이것 은 구성 요소 의 포 지 셔 닝 메커니즘 과 관련된다.Qt 는 두 가지 구성 요소 포 지 셔 닝 체 제 를 제공 합 니 다.절대 포 지 셔 닝 과 레이아웃 포 지 셔 닝 입 니 다.
말 그대로 절대적 인 포 지 셔 닝 은 가장 원시 적 인 포 지 셔 닝 방법 이다.이 구성 요소 의 좌표 와 너비 값 을 제시 하 는 것 이다.이렇게 하면 Qt 는 구성 요 소 를 어디 에 두 어야 하 는 지,구성 요소 의 크기 를 어떻게 설정 해 야 하 는 지 알 수 있 습 니 다.그러나 이렇게 하 는 문 제 는 사용자 가 창 크기 를 바 꾸 면 최대 화 단 추 를 누 르 거나 마 우 스 를 사용 하여 창 가장 자 리 를 끌 면 절대 포 지 셔 닝 구성 요 소 를 사용 하면 아무런 응답 이 없다 는 것 이다.이것 도 자 연 스 럽 습 니 다.Qt 에 게 창 이 변 할 때 구성 요소 가 자신 을 업데이트 하고 어떻게 업데이트 하 는 지 알려 주지 않 았 기 때 문 입 니 다.구성 요 소 를 자동 으로 업데이트 시 켜 야 한다 면-이것 은 흔히 볼 수 있 는 수요 입 니 다.예 를 들 어 최대 화 할 때 Word 는 항상 원고지 구역 을 확대 하고 도구 모음 을 길 게 늘 려 야 합 니 다.-해당 하 는 함 수 를 만들어 서 이러한 변화 에 응답 해 야 합 니 다.또는 더 쉬 운 방법 도 있 습 니 다.사용자 가 창 크기 를 바 꾸 는 것 을 금지 합 니 다.하지만 장기 적 인 계획 은 아니다.
이러한 변화의 수요 에 맞추어 Qt 는 또 다른 메커니즘 인 구 조 를 제공 하여 이 문 제 를 해결 했다.구성 요 소 를 특정한 레이아웃 에 넣 으 면 레이아웃 은 전문 적 인 레이아웃 관리자 가 관리 합 니 다.크기 나 위 치 를 조정 해 야 할 때 Qt 는 해당 하 는 레이아웃 관리 자 를 사용 하여 조정 합 니 다.
신호 와 슬롯 의 connect
Qt4 방식:매크로
//Qt4:
/* 1*/ static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
/* 2*/ QMetaObject::Connection connect(const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type = Qt::AutoConnection) const
Qt5 방식:함수 포인터
// Qt5:
/* 3*/ static QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)
/* 4*/ static QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
/* 5*/ static QMetaObject :: Connection QObject :: connect(const QObject * sender, const QMetaMethod&signal,const QObject * receiver, const QMetaMethod& method,Qt :: ConnectionType type = Qt :: AutoConnection)
connect 다섯 번 째 매개 변수type:신호 와 슬롯 의 연결 방식 을 가리 키 는 데 사 용 됩 니 다.신 호 를 즉시 한 슬롯 으로 전송 할 지,아니면 잠시 후에 줄 을 서서 전송 을 기다 릴 지 결정 합 니 다.관련 방식 은 매 거 진 Qt::Connection Type 을 사용 하여 설명 하고,아래 표 는 그 값 과 의 미 를 나타 낸다.
매 거
값.
설명 하 다.
Qt::AutoConnection
0
**(자동 연결,기본 값).**수신 자가 신 호 를 보 내 는 스 레 드 에 머 물 러 있 으 면 Qt:DirectConnection 을 사용 합 니 다.그렇지 않 으 면 Qt:Queued Connection 을 사용 합 니 다.신호 가 발 사 될 때 어떤 관련 유형 을 사용 하 는 지 확인 합 니 다.
Qt::DirectConnection
1
직접 연관.신호 가 발 사 된 후 즉시 슬롯 을 호출 합 니 다.슬롯 이 실 행 된 후에 야 신 호 를 발사 한 후의 코드(즉 emit 키워드 후의 코드)를 실행 할 수 있 습 니 다.이 슬롯 은 신호 스 레 드 에서 실 행 됩 니 다.
Qt::QueuedConnection
2
대기 열 연결.제어 권 이 수신 자 스 레 드 의 이벤트 순환 으로 돌아 간 후에 야 슬롯 이 호출 됩 니 다.즉,emit 키워드 뒤의 코드 는 즉시 실 행 됩 니 다.슬롯 은 잠시 후에 실 행 됩 니 다.이 슬롯 은 수신 자의 스 레 드 에서 실 행 됩 니 다.
Qt::BlockingQueuedConnection
3
대기 열 연결 을 차단 합 니 다.Qt::Queued Connection 과 마찬가지 로 슬롯 이 돌아 올 때 까지 신호 스 레 드 만 계속 막 힙 니 다.수신 자가 신호 스 레 드 에 머 물 러 있 으 면 이 연결 을 사용 할 수 없습니다.그렇지 않 으 면 프로그램 이 잠 겨 있 습 니 다.
Qt::UniqueConnection
0x80
유일한 연관 성.이것 은 위치 나 상기 모든 연결 유형 과 조합 할 수 있 는 표지 입 니 다.Qt::UniqueConnection 을 설정 할 때 는 중복 되 지 않 은 상태 에서 만 연결 이 가능 합 니 다.중복 연결(즉,같은 신호 가 같은 대상 의 똑 같은 슬롯 을 가리 키 는 것)이 있 으 면 연결 이 실패 합 니 다.이 경우 잘못된 QMetaObject::Connection 으로 돌아 갑 니 다.
예시
// 1
A ma; B mb;
QObject::connect (&ma, SIGNAL( s(int) ), &mb, SLOT(x(int) );
// 2
A ma; B mb;
mb.connect(&ma, SIGNAL(s(int)), SLOT(x(int));
// 3
A ma; B mb;
QObject::connect(&ma, &A::s, &mb, &B::x );
// 4
A ma;
QObject::connect(&ma, &A::s, &B::x); // void x(int i) B
// 5
A ma; B mb;
int indexSig = ma.metaObject()->indexOfSignal("clicked(bool)");
int indexSlot = mb.metaObject()->indexOfSlot("close()");
connect(&ma, ma.metaObject()->method(indexSig), &mb, mb.metaObject()->method(indexSlot));
보충:4.567917.형식 3 의 슬롯 함 수 는 slots 키 워드 를 사용 하지 않 고 임의의 구성원 함수 가 슬롯 함수 일 수 있 습 니 다.형식 1 의 슬롯 함 수 는 반드시 slots 수식 을 사용 해 야 한다4.567917.형식 1 의 슬롯 함 수 는 private 의 제한 을 받 지 않 습 니 다.즉,슬롯 이 private 이 더 라 도 신 호 를 통 해 이 슬롯 함 수 를 호출 할 수 있 고 형식 3 은 connect 를 사용 할 때 오류 가 발생 합 니 다신호 와 슬롯 의 disconnect
/* 1*/ static bool QObject::disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
/* 2*/ static bool QObject::disconnect(const QMetaObject::Connection &connection)
/* 3*/ static bool QObject::disconnect(const QObject *sender, PointerToMemberFunction signal, const QObject*receiver, PointerToMemberFunction method)
/* 4*/ static bool QObject::disconnect(const QObject *sender, const QMetaMethod &signal, const QObject*receiver, const QMetaMethod &method)
/* 5*/ bool QObject::disconnect(const char *signal = Q_NULLPTR, const QObject *receiver = Q_NULLPTR, const char *method = Q_NULLPTR) const
/* 6*/ bool QObject::disconnect(const QObject *receiver, const char *method = Q_NULLPTR) const
보충:4.567917.형식 3 의 슬롯 함 수 는 slots 키 워드 를 사용 하지 않 고 임의의 구성원 함수 가 슬롯 함수 일 수 있 습 니 다.형식 1 의 슬롯 함 수 는 반드시 slots 수식 을 사용 해 야 한다4.567917.형식 1 의 슬롯 함 수 는 private 의 제한 을 받 지 않 습 니 다.즉,슬롯 이 private 이 더 라 도 신 호 를 통 해 이 슬롯 함 수 를 호출 할 수 있 고 형식 3 은 connect 를 사용 할 때 오류 가 발생 합 니 다Qt4 와 Qt5 의 신호 와 슬롯 의 사용 차이 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.Qt4 와 Qt5 에 관 한 더 많은 신호 와 슬롯 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt5 텍스트 편집기 구현(상세 코드 첨부)메뉴 인터페이스 설정 메뉴 인터페이스 저희 가 코드 를 바로 올 리 도록 하 겠 습 니 다. 먼저 그림 을 PDF 로 돌 리 려 면 디 렉 터 리 가 아 닌 pdf 파일 을 선택해 야 합 니 다 그 다음 에 PDF ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.