QMetaObject class contains meta-information about Qt objects. 更多...
头: | #include <QMetaObject> |
qmake: | QT += core |
class | Connection |
QMetaClassInfo | classInfo (int index ) const |
int | classInfoCount () const |
int | classInfoOffset () const |
const char * | className () const |
QMetaMethod | constructor (int index ) const |
int | constructorCount () const |
QMetaEnum | enumerator (int index ) const |
int | enumeratorCount () const |
int | enumeratorOffset () const |
int | indexOfClassInfo (const char * name ) const |
int | indexOfConstructor (const char * constructor ) const |
int | indexOfEnumerator (const char * name ) const |
int | indexOfMethod (const char * method ) const |
int | indexOfProperty (const char * name ) const |
int | indexOfSignal (const char * signal ) const |
int | indexOfSlot (const char * slot ) const |
bool | inherits (const QMetaObject * metaObject ) const |
QMetaMethod | method (int index ) const |
int | methodCount () const |
int | methodOffset () const |
QObject * | newInstance (QGenericArgument val0 = QGenericArgument( Q_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()) const |
QMetaProperty | property (int index ) const |
int | propertyCount () const |
int | propertyOffset () const |
const QMetaObject * | superClass () const |
QMetaProperty | userProperty () const |
bool | checkConnectArgs (const char * signal , const char * method ) |
bool | checkConnectArgs (const QMetaMethod & signal , const QMetaMethod & method ) |
void | connectSlotsByName (QObject * object ) |
bool | invokeMethod (QObject * obj , const char * member , Qt::ConnectionType type , QGenericReturnArgument ret , QGenericArgument val0 = QGenericArgument( Q_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()) |
bool | invokeMethod (QObject * obj , const char * member , QGenericReturnArgument ret , QGenericArgument val0 = QGenericArgument( Q_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()) |
bool | invokeMethod (QObject * obj , const char * member , Qt::ConnectionType type , QGenericArgument val0 = QGenericArgument( Q_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()) |
bool | invokeMethod (QObject * obj , const char * member , QGenericArgument val0 = QGenericArgument( Q_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()) |
QByteArray | normalizedSignature (const char * method ) |
QByteArray | normalizedType (const char * type ) |
QGenericArgument | Q_ARG ( Type , const Type & value ) |
QGenericReturnArgument | Q_RETURN_ARG ( Type , Type & value ) |
QMetaObject class contains meta-information about Qt objects.
Qt 元对象系统 in Qt is responsible for the signals and slots inter-object communication mechanism, runtime type information, and the Qt property system. A single QMetaObject instance is created for each QObject 在应用程序中使用的子类,且此实例存储所有元信息为 QObject 子类。此对象是可用的作为 QObject::metaObject ().
应用程序编程通常不要求此类,但它很有用若编写元应用程 (譬如:脚本引擎或 GUI 构建器)。
最可能找到的有用函数是这些:
索引函数 indexOfConstructor (), indexOfMethod (), indexOfEnumerator (),和 indexOfProperty () 将构造函数名称、成员函数、枚举器或特性映射到元对象中的索引。例如,Qt 使用 indexOfMethod () 在内部当把信号连接到槽时。
类也可以拥有列表化的 name -- value 对的额外类信息,存储在 QMetaClassInfo 对象。对数的返回通过 classInfoCount (),单个对的返回通过 classInfo (),和可以搜索对采用 indexOfClassInfo ().
另请参阅 QMetaClassInfo , QMetaEnum , QMetaMethod , QMetaProperty , QMetaType ,和 元对象系统 .
[static]
bool
QMetaObject::
checkConnectArgs
(const
char
*
signal
, const
char
*
method
)
返回
true
若
signal
and
method
自变量兼容;否则返回
false
.
Both signal and method 期望被规范化。
另请参阅 normalizedSignature ().
[static]
bool
QMetaObject::
checkConnectArgs
(const
QMetaMethod
&
signal
, const
QMetaMethod
&
method
)
这是重载函数。
返回
true
若
signal
and
method
自变量兼容;否则返回
false
.
该函数在 Qt 5.0 引入。
返回用于类信息项的元数据,采用给定 index .
范例:
class MyClass : public QObject { Q_OBJECT Q_CLASSINFO("author", "Sabrina Schweinsteiger") Q_CLASSINFO("url", "http://doc.moosesoft.co.uk/1.0/") public: ... };
另请参阅 classInfoCount (), classInfoOffset (),和 indexOfClassInfo ().
返回此类类信息的项数。
另请参阅 classInfo (), classInfoOffset (),和 indexOfClassInfo ().
Returns the class information offset for this class; i.e. the index position of this class's first class information item.
If the class has no superclasses with class information, the offset is 0; otherwise the offset is the sum of all the class information items in the class's superclasses.
另请参阅 classInfo (), classInfoCount (),和 indexOfClassInfo ().
返回类名。
另请参阅 superClass ().
[static]
void
QMetaObject::
connectSlotsByName
(
QObject
*
object
)
Searches recursively for all child objects of the given object , and connects matching signals from them to slots of object that follow the following form:
void on_<object name>_<signal name>(<signal parameters>);
Let's assume our object has a child object of type
QPushButton
采用
对象名称
button1
. The slot to catch the button's
clicked()
signal would be:
void on_button1_clicked();
若 object itself has a properly set object name, its own signals are also connected to its respective slots.
另请参阅 QObject::setObjectName ().
返回元数据为构造函数采用给定 index .
该函数在 Qt 4.5 引入。
另请参阅 constructorCount () 和 newInstance ().
返回此类中的构造函数数。
该函数在 Qt 4.5 引入。
另请参阅 constructor () 和 indexOfConstructor ().
Returns the meta-data for the enumerator with the given index .
另请参阅 enumeratorCount (), enumeratorOffset (),和 indexOfEnumerator ().
返回此类中的枚举器数。
另请参阅 enumerator (), enumeratorOffset (),和 indexOfEnumerator ().
Returns the enumerator offset for this class; i.e. the index position of this class's first enumerator.
If the class has no superclasses with enumerators, the offset is 0; otherwise the offset is the sum of all the enumerators in the class's superclasses.
另请参阅 enumerator (), enumeratorCount (),和 indexOfEnumerator ().
查找类信息项 name 并返回其索引;否则返回 -1。
另请参阅 classInfo (), classInfoCount (),和 classInfoOffset ().
查找 constructor 并返回其索引;否则返回 -1。
注意, constructor 必须是规范化形式,作为返回通过 normalizedSignature ().
该函数在 Qt 4.5 引入。
另请参阅 constructor (), constructorCount (),和 normalizedSignature ().
查找枚举器 name 并返回其索引;否则返回 -1。
另请参阅 enumerator (), enumeratorCount (),和 enumeratorOffset ().
查找 method 并返回其索引;否则返回 -1。
注意, method 必须是规范化形式,作为返回通过 normalizedSignature ().
另请参阅 method (), methodCount (), methodOffset (),和 normalizedSignature ().
查找特性 name 并返回其索引;否则返回 -1。
另请参阅 property (), propertyCount (),和 propertyOffset ().
查找 signal 并返回其索引;否则返回 -1。
这如同 indexOfMethod (), except that it will return -1 if the method exists but isn't a signal.
注意, signal 必须是规范化形式,作为返回通过 normalizedSignature ().
另请参阅 indexOfMethod (), normalizedSignature (), method (), methodCount (),和 methodOffset ().
查找 slot 并返回其索引;否则返回 -1。
这如同 indexOfMethod (), except that it will return -1 if the method exists but isn't a slot.
另请参阅 indexOfMethod (), method (), methodCount (),和 methodOffset ().
返回
true
if the class described by this
QMetaObject
inherits the type described by
metaObject
;否则返回 false。
类型被认为继承本身。
该函数在 Qt 5.7 引入。
[static]
bool
QMetaObject::
invokeMethod
(
QObject
*
obj
, const
char
*
member
,
Qt::ConnectionType
type
,
QGenericReturnArgument
ret
,
QGenericArgument
val0
= QGenericArgument( Q_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())
援引
member
(信号或槽名称) 在对象
obj
。返回
true
若成员可以被援引。返回
false
若没有这样的成员或参数不匹配。
援引可以是同步 (或异步) 的,从属 type :
The return value of the member function call is placed in ret . If the invocation is asynchronous, the return value cannot be evaluated. You can pass up to ten arguments ( val0 , val1 , val2 , val3 , val4 , val5 , val6 , val7 , val8 ,和 val9 ) to the member 函数。
QGenericArgument and QGenericReturnArgument are internal helper classes. Because signals and slots can be dynamically invoked, you must enclose the arguments using the Q_ARG () 和 Q_RETURN_ARG () macros. Q_ARG () takes a type name and a const reference of that type; Q_RETURN_ARG () takes a type name and a non-const reference.
You only need to pass the name of the signal or slot to this function, not the entire signature. For example, to asynchronously invoke the quit() slot on a QThread , use the following code:
QMetaObject::invokeMethod(thread, "quit", Qt::QueuedConnection);
With asynchronous method invocations, the parameters must be of types that are known to Qt's meta-object system, because Qt needs to copy the arguments to store them in an event behind the scenes. If you try to use a queued connection and get the error message
QMetaObject::invokeMethod: Unable to handle unregistered datatype 'MyType'
call qRegisterMetaType () to register the data type before you call invokeMethod().
要同步援引
compute(QString, int, double)
slot on some arbitrary object
obj
retrieve its return value:
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));
If the "compute" slot does not take exactly one QString , one int and one double in the specified order, the call will fail.
另请参阅 Q_ARG (), Q_RETURN_ARG (), qRegisterMetaType (),和 QMetaMethod::invoke ().
[static]
bool
QMetaObject::
invokeMethod
(
QObject
*
obj
, const
char
*
member
,
QGenericReturnArgument
ret
,
QGenericArgument
val0
= QGenericArgument( Q_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())
此函数重载 invokeMethod ().
此重载总是援引成员使用连接类型 Qt::AutoConnection .
[static]
bool
QMetaObject::
invokeMethod
(
QObject
*
obj
, const
char
*
member
,
Qt::ConnectionType
type
,
QGenericArgument
val0
= QGenericArgument( Q_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())
此函数重载 invokeMethod ().
此重载可以被使用,若对成员的返回值不感兴趣。
[static]
bool
QMetaObject::
invokeMethod
(
QObject
*
obj
, const
char
*
member
,
QGenericArgument
val0
= QGenericArgument( Q_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())
此函数重载 invokeMethod ().
This overload invokes the member using the connection type Qt::AutoConnection and ignores return values.
Returns the meta-data for the method with the given index .
另请参阅 methodCount (), methodOffset (),和 indexOfMethod ().
Returns the number of methods in this class, including the number of methods provided by each base class. These include signals and slots as well as normal member functions.
Use code like the following to obtain a QStringList containing the methods specific to a given class:
const QMetaObject* metaObject = obj->metaObject(); QStringList methods; for(int i = metaObject->methodOffset(); i < metaObject->methodCount(); ++i) methods << QString::fromLatin1(metaObject->method(i).methodSignature());
另请参阅 method (), methodOffset (),和 indexOfMethod ().
Returns the method offset for this class; i.e. the index position of this class's first member function.
The offset is the sum of all the methods in the class's superclasses (which is always positive since QObject has the deleteLater() slot and a destroyed() signal).
另请参阅 method (), methodCount (),和 indexOfMethod ().
Constructs a new instance of this class. You can pass up to ten arguments ( val0 , val1 , val2 , val3 , val4 , val5 , val6 , val7 , val8 ,和 val9 ) to the constructor. Returns the new object, or 0 if no suitable constructor is available.
Note that only constructors that are declared with the Q_INVOKABLE modifier are made available through the meta-object system.
该函数在 Qt 4.5 引入。
另请参阅 Q_ARG () 和 constructor ().
[static]
QByteArray
QMetaObject::
normalizedSignature
(const
char
*
method
)
规范化签名为给定 method .
Qt 使用规范化签名来决定 2 给定信号/槽是否兼容。规范化将空白减少到最小,将 const 移动到适当位置前面,从值类型移除 const,并采用值替换 const 引用。
另请参阅 checkConnectArgs () 和 normalizedType ().
[static]
QByteArray
QMetaObject::
normalizedType
(const
char
*
type
)
规范化 type .
见 QMetaObject::normalizedSignature () 了解 Qt 如何规范化的描述。
范例:
QByteArray normType = QMetaObject::normalizedType(" int const *"); // normType is now "const int*"
该函数在 Qt 4.2 引入。
另请参阅 normalizedSignature ().
返回元数据若特性具有给定 index 。若没有这种特性存在,null QMetaProperty 被返回。
另请参阅 propertyCount (), propertyOffset (),和 indexOfProperty ().
Returns the number of properties in this class, including the number of properties provided by each base class.
Use code like the following to obtain a QStringList containing the properties specific to a given class:
const QMetaObject* metaObject = obj->metaObject(); QStringList properties; for(int i = metaObject->propertyOffset(); i < metaObject->propertyCount(); ++i) properties << QString::fromLatin1(metaObject->property(i).name());
另请参阅 property (), propertyOffset (),和 indexOfProperty ().
Returns the property offset for this class; i.e. the index position of this class's first property.
The offset is the sum of all the properties in the class's superclasses (which is always positive since QObject has the name() property).
另请参阅 property (), propertyCount (),和 indexOfProperty ().
Returns the meta-object of the superclass, or 0 if there is no such object.
另请参阅 className ().
Returns the property that has the
USER
flag set to true.
该函数在 Qt 4.2 引入。
另请参阅 QMetaProperty::isUser ().
此宏接受 Type 和 value of that type and returns a QGenericArgument 对象,其可以被传递给 QMetaObject::invokeMethod ().
另请参阅 Q_RETURN_ARG ().
此宏接受 Type and a non-const reference to a value of that type and returns a QGenericReturnArgument 对象,其可以被传递给 QMetaObject::invokeMethod ().
另请参阅 Q_ARG ().