首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实用地生成Qt Q_OBJECT类

实用地生成Qt Q_OBJECT类
EN

Stack Overflow用户
提问于 2010-12-01 08:03:16
回答 1查看 304关注 0票数 1

如何通过元编程创建基于Q_OBJECT的类(具有信号和/或槽)?我不关心它是模板还是预处理器,两者似乎都不起作用,我也真的需要它。

我想要的是能够将任意函数绑定到Qt信号。Qt信号无法做到这一点,boost信号做到了这一点。因此,我需要一个Qt对象,它可以连接到Qt信号,并简单地将其转发到boost信号。我需要做一堆这样的事情,所以自动化会很好。

主要的问题似乎是moc处理器--这并不奇怪。它不理解基本的预处理(ifs除外),显然也不能做模板类。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-02 03:12:38

以下是我对Qt moc系统的发现:

使用一些http://www.codeproject.com/KB/cross-platform/qt_reversing.aspx ...

因为我知道生成的对象只有一个插槽,没有其他东西(这就是它的用途),所以使用预处理器生成moc内容应该是可能的,尽管可能很困难。

Qt_moc_data_?[]数组中的大多数信息都可以进行硬编码。唯一感兴趣的似乎是插槽,而且只有一个。其余的可以是{ 5, 0,0,0,1,14,0,0,0,0,0,0,0,0 ... slot line ...., 0}

在上面的链接中描述了槽线。

Qt_moc_stringdata_?需要类似于:#object_name "\0\0" (param > 1 ? param-1:0 count commas) "\0" #functionname #paramtypelist

我相信所有这些都可以通过预处理器生成。棘手的部分是槽行必须包含提供qt_moc_stringdata_索引的数字?

还有一些函数需要生成,还有一个QMetaClass类型的变量或者其他什么……除了调用程序必须重新解释强制转换所有参数之外,大多数内容都应该相当简单。

尽管如此,我相信预处理器可以生成所有的代码,这似乎是唯一的方法。我从qtcenter论坛得到的唯一帮助是使用:

代码语言:javascript
复制
#ifdef MYCLASS
struct myclass : QObject
{
  ... a QObject definition...
};
#endif

..。而这显然完全不足以完成这项任务。有时,人们给出的答案让我感到疑惑。

不幸的是,当然,所有这些魔法将在很大程度上取决于所使用的moc的版本。

我已经找到了一种更好、更简单的方法来实现这一点。我已经开始了一系列关于创造这个怪物的博客文章。请参阅http://crazyeddiecpp.blogspot.com/2011/01/quest-for-sane-signals-in-qt-step-1.html

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

https://stackoverflow.com/questions/4320002

复制
相关文章

相似问题

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