Home · All Classes · Modules  · QSS HELP  · QSS 案例 · VER007 HOME

QMetaMethod Class Reference
[QtCore module]

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

Types

Methods


Detailed Description

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

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

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


Type Documentation

QMetaMethod.Access

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

Constant Value
QMetaMethod.Private 0
QMetaMethod.Protected 1
QMetaMethod.Public 2

QMetaMethod.MethodType

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

Method Documentation

QMetaMethod.__init__ (self)

QMetaMethod.__init__ (self, QMetaMethod)

Access QMetaMethod.access (self)

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

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

See also methodType( ) 。

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

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

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

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

 int methodIndex = pushButton->metaObject()->indexOfMethod("animateClick()");
 QMetaMethod method = metaObject->method(methodIndex);
 method.invoke(pushButton, Qt.QueuedConnection);

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

 QMetaMethod.invoke: Unable to handle unregistered datatype 'MyType'

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

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

 QString retVal;
 QByteArray normalizedSignature = QMetaObject.normalizedSignature("compute(QString, int, double)");
 int methodIndex = obj->metaObject()->indexOfMethod(normalizedSignature);
 QMetaMethod method = metaObject->method(methodIndex);
 method.invoke(obj,
               Qt.DirectConnection,
               Q_RETURN_ARG(QString, retVal),
               Q_ARG(QString, "sqrt"),
               Q_ARG(int, 42),
               Q_ARG(double, 9.7));

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

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

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

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

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

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( ) 。

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

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并忽略返回值。

int QMetaMethod.methodIndex (self)

返回此方法的指数。

此功能被引入Qt的4.6 。

MethodType QMetaMethod.methodType (self)

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

See also access( ) 。

list-of-QByteArray QMetaMethod.parameterNames (self)

返回参数名称的列表。

See also parameterTypes()和signature( ) 。

list-of-QByteArray QMetaMethod.parameterTypes (self)

返回参数类型的列表。

See also parameterNames()和signature( ) 。

str QMetaMethod.signature (self)

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

See also parameterTypes()和parameterNames( ) 。

str QMetaMethod.tag (self)

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

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

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

 #define THISISTESTTAG // tag text
 ...
 private slots:
     THISISTESTTAG void testFunc();

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

 MainWindow win;
 win.show();

 int functionIndex = win.metaObject()->indexOfSlot("testFunc()");
 QMetaMethod mm = metaObject()->method(functionIndex);
 qDebug() << mm.tag(); // prints THISISTESTTAG

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

str QMetaMethod.typeName (self)

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




PyQt 4.10.3 for X11 Copyright © Riverbank Computing Ltd and Nokia 2012 Qt 4.8.5