Qt의 신호조 (1: 기본 응용)
2049 단어 QT 어플리케이션
1: 신호조 사용 튜토리얼 코드
//
class MyClass : public QObject
{
//Q_OBJECT , QObject ,
Q_OBJECT
signals: // ,
void mySignal();
void mySignal_2(QString arg1);
private slots:
void myslot();
void myslot(QString arg1);
};
//cpp
MyClass::MyClass(){
//
connect(this, SIGNAL(mySignal()), this, SLOT(myslot()), Qt::AutoConnection);
connect(this, SIGNAL(mySignal_2(QString)), this, SLOT(myslot(QString)), Qt::AutoConnection);
//
connect(this, SIGNAL(mySignal_2(QString)), this, SLOT(myslot()), Qt::AutoConnection);
//
emit myslot();
QString arg;
emit myslot(arg);
}
void MyClass::myslot(){
}
void MyClass::myslot(QString arg1){
}
2: 신호조의 연결
// :
// : , , ,
connect(QObject*sender, QObject::signal, QObject*receiver, QObject::method,Qt::ConnectionType type = Qt::AutoConnection)
// : , :SIGNAL(),SLOT()
connect(QObject*sender, SIGNAL(signal()), QObject*receiver, SLOT(method()), Qt::ConnectionType type = Qt::AutoConnection)
// : lambda
connet(QObject *sender,QObject::signal,[&](){;})
3: 신호조 연결의 다섯 번째 매개 변수 소개
연결 유형 매개변수
소개하다.
Qt::AutoConnection
자동 연결: 기본 방식입니다.신호가 보내는 스레드와 나쁜 대상은 한 스레드에서 DirectConnection과 같고, 서로 다른 스레드에서는QueuedConnection과 같다
Qt::DirectConnection
직접 연결: 슬롯 함수를 직접 호출하는 것과 같지만 신호가 보내는 라인과 슬롯의 대상이 한 라인이 없을 때 슬롯 함수는 보내는 신호에서 실행된다.
Qt::QueuedConnection
대기열 연결: 내부는postEvent를 통해 이루어집니다.실시간으로 호출되지 않습니다. 슬롯 함수는 슬롯 함수 대상이 있는 라인에서 영원히 실행됩니다.만약 신호 파라미터가 인용 형식이라면, 따로 한 부를 복사할 것입니다.노정은 안전하다.
Qt::BlockingQueuedConnection
연결 차단: 이 연결 방식은 신호가 보내는 라인과 슬롯 함수의 대상이 더 이상 한 라인에서만 사용할 수 있습니다.신호량 + postEvent를 통해 이루어집니다.실시간으로 호출되지 않습니다. 슬롯 함수는 슬롯 함수 대상이 있는 라인에서 영원히 실행됩니다.그러나 신호를 보낸 후 현재 라인이 막혀 슬롯 함수 실행이 끝난 후에야 계속 실행됩니다.
Qt::UniqueConnection
중복 연결을 방지합니다.현재 신호와 슬롯이 연결되어 있으면 더 이상 연결되지 않습니다.