首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用QMetaProperty进行反思

用QMetaProperty进行反思
EN

Stack Overflow用户
提问于 2014-08-28 14:15:34
回答 1查看 748关注 0票数 2

我有一个ObjectA

类ObjectA : QObject { Q_OBJECT Q_PROPERTY(int _a读写setA NOTIFY ) public: ObjectA(int a):_a(a) {} int a() const {返回_a;}公共时隙: void ( int a) { _a = a;发射aChanged(_a);}信号: void (Int);

ObjectB

类ObjectB : QObject { Q_OBJECT Q_PROPERTY(int _b读b写setB NOTIFY ) public: ObjectB(int b):_b(b) {} int b() const {返回_b;}公共时隙: void ( int b) { _b = b;发射bChanged(_b);}信号: void (Int);

我想做这样的信号/插槽连接

QObject:连接(&objA,信号(aChanged(Int)),&objB,时隙(setB(Int);

只知道名字的属性。

ObjectA objA(10);ObjectB objB(5);

代码语言:javascript
复制
QObject * objectA = &objA;
const QMetaObject* metaObjectA = objectA->metaObject();
QMetaProperty metaPropertyA = metaObjectA->property(metaObjectA->indexOfProperty("_a"));


QObject * object = &objB;
const QMetaObject* metaObjectB = object->metaObject();
QMetaProperty metaPropertyB = metaObjectB->property(metaObjectB->indexOfProperty("_b"));

QObject::connect(&objA, metaPropertyA.notifySignal().methodSignature(), &objB, ... );

objA.setA(2);
std::cout << "objA.a() = " << objA.a() << " objB.b() = " << objB.b() << std::endl;

但是

metaPropertyA.notifySignal().methodSignature()

不返回函数的指针,我也不知道如何获得set方法指针。

EN

回答 1

Stack Overflow用户

发布于 2014-08-28 15:11:49

metaPropertyA.notifySignal().signature()不返回方法指针,而是返回它的签名(文本表示)--在您的示例中,"aChanged(int)“是连接()所需要的。

如果您想直接调用它,可以使用metaPropertyA.notifySignal().invoke(...)

编辑:您需要连接一些数字和方法名称作为信号和插槽宏做

所以你需要用程序创建

代码语言:javascript
复制
QObject::connect(&objA, "2aChanged(int)", &objB, "1setB(int)");

但是如何获得"1setB(int)“是另一项任务。

EDIT2:我不知道这个数字是什么意思,因为它不是索引

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25551042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档