QMetaObject::invokeMethod()的介绍 | 您所在的位置:网站首页 › inputmethodquery › QMetaObject::invokeMethod()的介绍 |
QMetaObject::invokeMethod()的介绍 在Qt框架中,QMetaObject类提供了一些反射机制可以实现类似于Java反射机制的功能。其中一个函数就是QMetaObject::invokeMethod(),它可以通过字符串调用对象的方法,同时支持异步执行和跨线程操作等特性。 使用方法QMetaObject::invokeMethod()方法有多个重载,最常用的格式如下: 12345678910111213bool QMetaObject::invokeMethod(QObject *obj, const char *method, Qt::ConnectionType type = Qt::AutoConnection, QGenericReturnArgument ret = QGenericReturnArgument(), QGenericArgument val0 = QGenericArgument(), 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()); obj:要调用方法的QObject对象指针。 method:需要调用的方法名字符串。 type:连接类型,决定调用方法的线程以及调用形式。其值可以是Qt::DirectConnection(同步直接调用)、Qt::QueuedConnection(异步排队调用)和Qt::AutoConnection(根据线程自动选择同步直接调用或异步排队调用)。 ret:返回值类型。可以使用QGenericReturnArgument分别传入不同的返回类型,通常为void。 val0~val9:可选的十个参数值,根据需要传递。 使用示例下面是一个使用QMetaObject::invokeMethod()来调用另一个对象函数的例子: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#include #includeclass MyWorker : public QObject{ Q_OBJECT public: explicit MyWorker(QObject *parent = nullptr) : QObject(parent) {} signals: void finished(); void progressMade(int value); public slots: void doWork() { for (int i = 0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |