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를 되돌려줍니다. 실패하면 이 방법이 없거나 파라미터가 잘못 들어왔습니다.
매개 변수 소개
참고: 들어오는 매개 변수는 개수로 제한되어 있으며 구성원 함수에 최대 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에서 함수를 선언하거나 올바르게 호출할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt로 문자와 이미지의 혼합 텍스트 그리기텍스트를 그리려면 QPainter::drawText 함수를 사용하지만 텍스트와 동시에 이미지 (아이콘 등)를 함께 그리기를 원합니다. QLabel와 QPushButton는 이미지와 텍스트를 표시하는 기능을 가지고 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.