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
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。返回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。如果调用是异步的,则返回值无法评估。你可以通过多达十个参数(val0,val1,val2,val3,val4,val5,val6,val7,val8和val9)这个方法调用。
QGenericArgument和QGenericReturnArgument是内部的辅助类。由于信号和槽可以动态调用,则必须使用附上参数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();
就目前而言,moc不支持任何特殊的标记。
str QMetaMethod.typeName (self)
返回此方法的返回类型,或空字符串,如果返回类型是void。