繁体   English   中英

实用地生成Qt Q_OBJECT类

[英]Generating Qt Q_OBJECT classes pragmatically

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

我想要的是能够将诸如事物之类的任意函数绑定到Qt信号。 Qt信号无能为力,升压信号无能为力。 因此,我需要一个可以连接到Qt信号并将其转发到升压信号的Qt对象。 我需要一堆,所以自动化会很好。

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

有任何想法吗?

这是我发现的有关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论坛获得的唯一帮助是使用:

#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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM