QMetaMethod Class Reference

[QtCore module]

该QMetaMethod类提供的成员函数的元数据。More…

Types

  • enum Access { Private, Protected, Public }
  • enum MethodType { Method, Signal, Slot, Constructor }

Methods

  • __init__ (self)
  • __init__ (self, QMetaMethod)
  • Access access (self)
  • object invoke (self, QObject object, Qt.ConnectionType connectionType, QGenericReturnArgument returnValue, QGenericArgument value0 = QGenericArgument(0,0), QGenericArgument value1 = QGenericArgument(0,0), QGenericArgument value2 = QGenericArgument(0,0), QGenericArgument value3 = QGenericArgument(0,0), QGenericArgument value4 = QGenericArgument(0,0), QGenericArgument value5 = QGenericArgument(0,0), QGenericArgument value6 = QGenericArgument(0,0), QGenericArgument value7 = QGenericArgument(0,0), QGenericArgument value8 = QGenericArgument(0,0), QGenericArgument value9 = QGenericArgument(0,0))
  • object invoke (self, QObject object, QGenericReturnArgument returnValue, QGenericArgument value0 = QGenericArgument(0,0), QGenericArgument value1 = QGenericArgument(0,0), QGenericArgument value2 = QGenericArgument(0,0), QGenericArgument value3 = QGenericArgument(0,0), QGenericArgument value4 = QGenericArgument(0,0), QGenericArgument value5 = QGenericArgument(0,0), QGenericArgument value6 = QGenericArgument(0,0), QGenericArgument value7 = QGenericArgument(0,0), QGenericArgument value8 = QGenericArgument(0,0), QGenericArgument value9 = QGenericArgument(0,0))
  • object invoke (self, QObject object, Qt.ConnectionType connectionType, QGenericArgument value0 = QGenericArgument(0,0), QGenericArgument value1 = QGenericArgument(0,0), QGenericArgument value2 = QGenericArgument(0,0), QGenericArgument value3 = QGenericArgument(0,0), QGenericArgument value4 = QGenericArgument(0,0), QGenericArgument value5 = QGenericArgument(0,0), QGenericArgument value6 = QGenericArgument(0,0), QGenericArgument value7 = QGenericArgument(0,0), QGenericArgument value8 = QGenericArgument(0,0), QGenericArgument value9 = QGenericArgument(0,0))
  • object invoke (self, QObject object, QGenericArgument value0 = QGenericArgument(0,0), QGenericArgument value1 = QGenericArgument(0,0), QGenericArgument value2 = QGenericArgument(0,0), QGenericArgument value3 = QGenericArgument(0,0), QGenericArgument value4 = QGenericArgument(0,0), QGenericArgument value5 = QGenericArgument(0,0), QGenericArgument value6 = QGenericArgument(0,0), QGenericArgument value7 = QGenericArgument(0,0), QGenericArgument value8 = QGenericArgument(0,0), QGenericArgument value9 = QGenericArgument(0,0))
  • int methodIndex (self)
  • MethodType methodType (self)
  • list-of-QByteArray parameterNames (self)
  • list-of-QByteArray parameterTypes (self)
  • str signature (self)
  • str tag (self)
  • str typeName (self)

Detailed Description

该QMetaMethod类提供的成员函数的元数据。

一个QMetaMethod有methodType()的一个signature( )的列表parameterTypes()和parameterNames( ) ,返回typeName()的一个tag() ,和一个access( )说明。您可以使用invoke( )来调用方法上的任意QObject

的方法,将只登记了元对象系统,如果它是一个槽,一个信号,或者与所声明的Q_INVOKABLE宏。构造也可以与注册Q_INVOKABLE


Type Documentation

  1. QMetaMethod.Access

这个枚举变量描述的方法的访问级别,下面在C + +中使用的约定。

Constant Value
QMetaMethod.Private 0
QMetaMethod.Protected 1
QMetaMethod.Public 2
  1. QMetaMethod.MethodType
Constant Value Description
QMetaMethod.Method 0 该函数是一个普通的成员函数。
QMetaMethod.Signal 1 该函数是一个信号。
QMetaMethod.Slot 2 该函数是一个槽。
QMetaMethod.Constructor 3 该函数是一个构造函数。

Method Documentation

  1. QMetaMethod.__init__ (self)
  1. QMetaMethod.__init__ (self, QMetaMethod)
  1. Access QMetaMethod.access (self)

[

返回此方法(私有,保护,或公共)的访问规范。

信号始终受到保护,这意味着你只能从类或子类发出它们。

]($docs-qmetamethod.html#Access-enum)

See also methodType( ) 。

  1. object QMetaMethod.invoke (self, QObject object, Qt.ConnectionType connectionType, QGenericReturnArgument returnValue, QGenericArgument value0 = QGenericArgument(0,0), QGenericArgument value1 = QGenericArgument(0,0), QGenericArgument value2 = QGenericArgument(0,0), QGenericArgument value3 = QGenericArgument(0,0), QGenericArgument value4 = QGenericArgument(0,0), QGenericArgument value5 = QGenericArgument(0,0), QGenericArgument value6 = QGenericArgument(0,0), QGenericArgument value7 = QGenericArgument(0,0), QGenericArgument value8 = QGenericArgument(0,0), QGenericArgument value9 = QGenericArgument(0,0))

调用此方法的对象上object。返回True如果该成员可被调用。返回False,如果没有这样的成员或参数不匹配。

该调用可以是同步或异步的,这取决于connectionType

  • If connectionType is Qt.DirectConnection, the member will be invoked immediately.
  • If connectionType is Qt.QueuedConnection, a QEvent will be posted and the member is invoked as soon as the application enters the main event loop.
  • If connectionType is Qt.AutoConnection, the member is invoked synchronously if object lives in the same thread as the caller; otherwise it will invoke the member asynchronously.

这个方法调用的返回值放在returnValue。如果调用是异步的,则返回值无法评估。你可以通过多达十个参数(val0val1val2val3val4val5val6val7val8val9)这个方法调用。

QGenericArgumentQGenericReturnArgument是内部的辅助类。由于信号和槽可以动态调用,则必须使用附上参数Q_ARG()和Q_RETURN_ARG( )宏。Q_ARG( )接受一个类型名称和类型的const引用;Q_RETURN_ARG( )接受一个类型名称和一个非const引用。

异步调用的animateClick()插槽上QPushButton

  1. int methodIndex = pushButton->metaObject()->indexOfMethod("animateClick()");
  2. [QMetaMethod]($docs-qmetamethod.html) method = metaObject->method(methodIndex);
  3. method.invoke(pushButton, [Qt](qt.html).QueuedConnection);

对于异步方法调用时,参数必须是已知Qt的元对象系统类型,因为Qt的需要复制到它们存储在幕后事件的参数。如果您尝试使用一个排队的连接,并收到错误消息

  1. [QMetaMethod]($docs-qmetamethod.html).invoke: Unable to handle unregistered datatype 'MyType'

通话qRegisterMetaType()注册的数据类型调用QMetaMethod.invoke ()之前。

要同步调用compute(QString, int, double)插槽上的一些任意对象obj检索它的返回值:

  1. [QString]($docs-qstring.html) retVal;
  2. [QByteArray](qbytearray.html) normalizedSignature = [QMetaObject]($docs-qmetaobject.html).normalizedSignature("compute(QString, int, double)");
  3. int methodIndex = obj->metaObject()->indexOfMethod(normalizedSignature);
  4. [QMetaMethod]($docs-qmetamethod.html) method = metaObject->method(methodIndex);
  5. method.invoke(obj,
  6. [Qt](qt.html).DirectConnection,
  7. Q_RETURN_ARG([QString]($docs-qstring.html), retVal),
  8. Q_ARG([QString]($docs-qstring.html), "sqrt"),
  9. Q_ARG(int, 42),
  10. Q_ARG(double, 9.7));

QMetaObject.normalizedSignature()被用在这里,以确保签名的格式是什么调用()期望。例如多馀的空格被删除。

如果“计算”老虎不采取只有一个QString一int和一间双人按照指定的顺序,则调用将失败。

Warning:这种方法不会测试的参数的有效性:object必须是类的实例QMetaObject而本QMetaMethod已建成使用。该参数必须具有相同的类型的那些预期通过该方法,否则,该行为是未定义的。

See also Q_ARG( )Q_RETURN_ARG( )qRegisterMetaType()和QMetaObject.invokeMethod( ) 。

  1. object QMetaMethod.invoke (self, QObject object, QGenericReturnArgument returnValue, QGenericArgument value0 = QGenericArgument(0,0), QGenericArgument value1 = QGenericArgument(0,0), QGenericArgument value2 = QGenericArgument(0,0), QGenericArgument value3 = QGenericArgument(0,0), QGenericArgument value4 = QGenericArgument(0,0), QGenericArgument value5 = QGenericArgument(0,0), QGenericArgument value6 = QGenericArgument(0,0), QGenericArgument value7 = QGenericArgument(0,0), QGenericArgument value8 = QGenericArgument(0,0), QGenericArgument value9 = QGenericArgument(0,0))

这个函数的重载invoke( ) 。

此重载始终使用连接类型调用该方法Qt.AutoConnection

  1. object QMetaMethod.invoke (self, QObject object, Qt.ConnectionType connectionType, QGenericArgument value0 = QGenericArgument(0,0), QGenericArgument value1 = QGenericArgument(0,0), QGenericArgument value2 = QGenericArgument(0,0), QGenericArgument value3 = QGenericArgument(0,0), QGenericArgument value4 = QGenericArgument(0,0), QGenericArgument value5 = QGenericArgument(0,0), QGenericArgument value6 = QGenericArgument(0,0), QGenericArgument value7 = QGenericArgument(0,0), QGenericArgument value8 = QGenericArgument(0,0), QGenericArgument value9 = QGenericArgument(0,0))

这个函数的重载invoke( ) 。

如果该成员的返回值是没有兴趣此重载都可以使用。

  1. object QMetaMethod.invoke (self, QObject object, QGenericArgument value0 = QGenericArgument(0,0), QGenericArgument value1 = QGenericArgument(0,0), QGenericArgument value2 = QGenericArgument(0,0), QGenericArgument value3 = QGenericArgument(0,0), QGenericArgument value4 = QGenericArgument(0,0), QGenericArgument value5 = QGenericArgument(0,0), QGenericArgument value6 = QGenericArgument(0,0), QGenericArgument value7 = QGenericArgument(0,0), QGenericArgument value8 = QGenericArgument(0,0), QGenericArgument value9 = QGenericArgument(0,0))

这个函数的重载invoke( ) 。

使用的连接类型此重载调用该方法Qt.AutoConnection并忽略返回值。

  1. int QMetaMethod.methodIndex (self)

返回此方法的指数。

此功能被引入Qt的4.6 。

  1. MethodType QMetaMethod.methodType (self)

[

返回此方法(信号,槽,或方法)的类型。

]($docs-qmetamethod.html#MethodType-enum)

See also access( ) 。

  1. list-of-QByteArray QMetaMethod.parameterNames (self)

返回参数名称的列表。

See also parameterTypes()和signature( ) 。

  1. list-of-QByteArray QMetaMethod.parameterTypes (self)

返回参数类型的列表。

See also parameterNames()和signature( ) 。

  1. str QMetaMethod.signature (self)

返回此方法的签名(例如,setValue(double)) 。

See also parameterTypes()和parameterNames( ) 。

  1. str QMetaMethod.tag (self)

返回与此方法关联的标记。

标籤是由公认的特殊宏moc这使人们有可能添加有关方法的额外信息。

标籤信息可以在函数声明如下方式添加:

  1. #define THISISTESTTAG // tag text
  2. ...
  3. private slots:
  4. THISISTESTTAG void testFunc();

并且信息可以通过使用如下方式访问:

  1. MainWindow win;
  2. win.show();
  3. int functionIndex = win.metaObject()->indexOfSlot("testFunc()");
  4. [QMetaMethod]($docs-qmetamethod.html) mm = metaObject()->method(functionIndex);
  5. qDebug() << mm.tag(); // prints THISISTESTTAG

就目前而言,moc不支持任何特殊的标记。

  1. str QMetaMethod.typeName (self)

返回此方法的返回类型,或空字符串,如果返回类型是void