Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实用地生成Qt Q_对象类_C++_Qt - Fatal编程技术网

C++ 实用地生成Qt Q_对象类

C++ 实用地生成Qt Q_对象类,c++,qt,C++,Qt,如何通过元编程创建基于Q_对象的类(具有信号和/或插槽的类)?我不在乎它是模板还是预处理器,两者都不起作用,我也确实需要它 我想要的是能够绑定任意函数,比如Qt信号。Qt信号不能做到这一点,增压信号是。所以,我需要一个Qt对象,它可以连接到一个Qt信号,然后简单地将它转发到一个boost信号。我需要做大量的工作,所以自动化会很好 主要问题似乎是——毫不奇怪——moc处理器。它不理解基本的预处理(ifs除外),显然也不能做模板类 有什么想法吗?以下是我对Qt moc系统的发现: 使用一些 因为我知

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

我想要的是能够绑定任意函数,比如Qt信号。Qt信号不能做到这一点,增压信号是。所以,我需要一个Qt对象,它可以连接到一个Qt信号,然后简单地将它转发到一个boost信号。我需要做大量的工作,所以自动化会很好

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


有什么想法吗?

以下是我对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垃圾。