Qt의 QmetaObject:::invokeMethod () 사용 안내

3213 단어 Qt

개술


Qt 원 대상 시스템은 Qt의 가장 핵심적인 기초 특성으로 원 대상 시스템은 신호와 슬롯 대상 간의 통신 메커니즘, 운행 시 유형 정보와 Qt 속성 시스템을 책임진다.응용 프로그램에서 사용하는 모든 QObject 하위 클래스에 대한 QMetaObject 실례를 만듭니다. 이 실례는 QObject 하위 클래스의 모든 메타 정보를 저장합니다.메타데이터 시스템을 통해 QObject의 어떤 파생 클래스의 클래스 이름, 어떤 신호, 슬롯, 속성, 호출 가능한 방법 등 정보를 조회할 수 있으며, QMetaObject:::invokeMethod () 를 사용하여 QObject의 메타데이터 시스템에 등록하는 방법을 호출할 수 있다.여기에는 개함수의 사용 방법과 대체적인 소개가 있다.

QMetaObject::invokeMethod()


QmetaObject의 invokeMethod () 방법은 대상의 신호, 슬롯, 호출 가능한 방법을 호출하는 데 사용됩니다.이것은 정적 방법으로, 함수 원형은 다음과 같습니다.
bool QMetaObject::invokeMethod(QObject *obj, const char *member, 
							Qt::ConnectionType type, 
							QGenericReturnArgument ret,
							QGenericArgument val0 = QGenericArgument(nullptr), 
							QGenericArgument val1 = QGenericArgument(), 
							QGenericArgument val2 = QGenericArgument(), 
						    QGenericArgument val3 = QGenericArgument(), 
							QGenericArgument val4 = QGenericArgument(),
							QGenericArgument val5 = QGenericArgument(),
							QGenericArgument val6 = QGenericArgument(), 
							QGenericArgument val7 = QGenericArgument(),
							QGenericArgument val8 = QGenericArgument(),
							QGenericArgument val9 = QGenericArgument())

최신 Qt5.13에서 QMetaObject의 invoke Method 함수는 모두 5개로 위의 이것을 제외하고는 모두 재부팅 함수이기 때문에 일일이 소개하지 않는다.
이 함수는obj 대상의member 방법을 호출하는 것입니다. 호출이 성공하면true를 되돌려주고, 호출이 실패하면false를 되돌려줍니다. 실패하면 이 방법이 없거나 파라미터가 잘못 들어왔습니다.

매개 변수 소개

  • 첫 번째 파라미터는 호출된 대상의 지침이다.
  • 두 번째 매개 변수는 방법의 이름이다.
  • 세 번째 매개 변수는 연결 유형이다.동기화 또는 비동기 호출을 결정하는 연결 유형을 지정할 수 있습니다.
  • type이 Qt::DirectConnection이면 즉시 해당 구성원이 호출됩니다.
  • type이 Qt::QueuedConnection이면 QEvent를 보내고 프로그램이 주 이벤트 순환에 들어간 후 바로 이 구성원을 호출합니다.
  • type이 Qt::BlockingQueuedConnection이면 Qt::QueuedConnection과 같은 방식으로 이 방법을 호출합니다. 현재 라인을 제외하고는 이벤트가 전달될 때까지 차단됩니다.이 연결 형식을 사용하여 같은 라인의 대상 간에 통신을 하면 자물쇠가 사라집니다.
  • type이 Qt::AutoConnection이면 obj가 호출자와 같은 라인에 있으면 이 구성원을 동기화합니다.그렇지 않으면 이 구성원을 비동기적으로 호출할 것입니다.

  • 네 번째 매개 변수는 호출된 함수의 반환값을 수신한다.호출이 비동기적이라면 되돌아오는 값을 계산할 수 없습니다.

  • 참고: 들어오는 매개 변수는 개수로 제한되어 있으며 구성원 함수에 최대 10개의 매개 변수(val0, val1, val2, val3, val4, val5, val6, val7, val8과 val9)를 전달할 수 있습니다.
    QGenericArgument와 QGenericReturnArgument는 내부 도움말 프로그램 클래스입니다.신호와 슬롯을 동적으로 호출할 수 있으므로 Q 를 사용해야 합니다.ARG() 및 QRETURN_ARG() 매크로를 사용하여 매개변수를 패키지화합니다.Q_ARG () 는 이 유형의 유형 이름과 const 인용을 받아들인다.Q_RETURN_ARG()는 유형 이름과 비const 참조를 수락합니다.
    주의: 이 기능은 라인이 안전합니다.

    호출 예


    하나의 대상에 슬롯 컴퓨터(QString, int, double)가 있고 QString 대상을 되돌려준다고 가정하면 호출 방식은 다음과 같다(동기화).
    QString retVal;
    QMetaObject::invokeMethod(obj, "compute", Qt::DirectConnection,
                              Q_RETURN_ARG(QString, retVal),
                              Q_ARG(QString, "sqrt"),
                              Q_ARG(int, 42),
                              Q_ARG(double, 9.7));
    

    QThread에서 quit() 슬롯을 비동기적으로 호출하는 경우를 가정합니다.
    QMetaObject::invokeMethod(thread, "quit", Qt::QueuedConnection);
    

    호출할 유형은 신호, 슬롯, Qt원 대상 시스템이 식별할 수 있는 유형이어야 하며, 신호와 슬롯이 아니면 qRegisterMetaType()를 사용하여 데이터 유형을 등록할 수 있습니다.또한 Q 사용INVOKABLE에서 함수를 선언하거나 올바르게 호출할 수 있습니다.

    좋은 웹페이지 즐겨찾기