C++ 实用地生成Qt Q_对象类
如何通过元编程创建基于Q_对象的类(具有信号和/或插槽的类)?我不在乎它是模板还是预处理器,两者都不起作用,我也确实需要它 我想要的是能够绑定任意函数,比如Qt信号。Qt信号不能做到这一点,增压信号是。所以,我需要一个Qt对象,它可以连接到一个Qt信号,然后简单地将它转发到一个boost信号。我需要做大量的工作,所以自动化会很好 主要问题似乎是——毫不奇怪——moc处理器。它不理解基本的预处理(ifs除外),显然也不能做模板类C++ 实用地生成Qt Q_对象类,c++,qt,C++,Qt,如何通过元编程创建基于Q_对象的类(具有信号和/或插槽的类)?我不在乎它是模板还是预处理器,两者都不起作用,我也确实需要它 我想要的是能够绑定任意函数,比如Qt信号。Qt信号不能做到这一点,增压信号是。所以,我需要一个Qt对象,它可以连接到一个Qt信号,然后简单地将它转发到一个boost信号。我需要做大量的工作,所以自动化会很好 主要问题似乎是——毫不奇怪——moc处理器。它不理解基本的预处理(ifs除外),显然也不能做模板类 有什么想法吗?以下是我对Qt moc系统的发现: 使用一些 因为我知
有什么想法吗?以下是我对Qt moc系统的发现: 使用一些 因为我知道生成的对象将有一个单独的插槽,没有其他(这就是它的用途)可以使用预处理器生成moc内容,尽管可能很困难 qt_moc_data_???[]数组中的大多数信息都可以硬编码。唯一感兴趣的似乎是插槽,而且只有一个。其余的可以是
{5,0,0,0,1,14,0,0,0,0,0,0,0…槽线…,0}
上述链接中描述了插槽线
qt_moc_stringdata_u2;???需要类似于:#对象名称“\0\0”(参数>1?参数-1:0计数逗号)”\0“#函数名称#参数类型列表
我相信所有这些都可以通过预处理器生成。棘手的部分是槽行必须包含为qt_moc_stringdata_2;提供索引的数字
还有一些函数需要生成,还有一个QMetaClass类型的变量或者其他什么。。。除调用程序外,大部分内容都应该相当直接,它必须重新解释所有参数
尽管如此,我相信预处理器可以生成所有数据,而这似乎是实现这一点的唯一方法。我从qtcenter论坛得到的唯一帮助是使用:
#ifdef MYCLASS
struct myclass : QObject
{
... a QObject definition...
};
#endif
。。。这显然不足以完成这项任务。有时人们给出的答案让我感到奇怪
当然,不幸的是,所有这些魔力在很大程度上取决于所使用的moc版本
我找到了一个更好更简单的方法来实现这一点。我已经开始了一系列关于创造这个怪物的博客文章。请参见以下是我对Qt moc系统的发现: 使用一些 因为我知道生成的对象将有一个单独的插槽,没有其他(这就是它的用途)可以使用预处理器生成moc内容,尽管可能很困难 qt_moc_data_???[]数组中的大多数信息都可以硬编码。唯一感兴趣的似乎是插槽,而且只有一个。其余的可以是
{5,0,0,0,1,14,0,0,0,0,0,0,0…槽线…,0}
上述链接中描述了插槽线
qt_moc_stringdata_u2;???需要类似于:#对象名称“\0\0”(参数>1?参数-1:0计数逗号)”\0“#函数名称#参数类型列表
我相信所有这些都可以通过预处理器生成。棘手的部分是槽行必须包含为qt_moc_stringdata_2;提供索引的数字
还有一些函数需要生成,还有一个QMetaClass类型的变量或者其他什么。。。除调用程序外,大部分内容都应该相当直接,它必须重新解释所有参数
尽管如此,我相信预处理器可以生成所有数据,而这似乎是实现这一点的唯一方法。我从qtcenter论坛得到的唯一帮助是使用:
#ifdef MYCLASS
struct myclass : QObject
{
... a QObject definition...
};
#endif
。。。这显然不足以完成这项任务。有时人们给出的答案让我感到奇怪
当然,不幸的是,所有这些魔力在很大程度上取决于所使用的moc版本
我找到了一个更好更简单的方法来实现这一点。我已经开始了一系列关于创造这个怪物的博客文章。请看根据我的经验,使用模板和QoObject做任何事情都很痛苦。我只能想象它将如何改变我们对你问题的看法。好吧,见鬼。。。。看起来应该可以务实地重新创建所有的moc垃圾。根据我的经验,使用模板和QoObject做任何事情都是痛苦的。我只能想象它将如何改变我们对你问题的看法。好吧,见鬼。。。。看起来应该可以务实地重现所有的moc垃圾。