gpt4 book ai didi

c++ - 实用地生成 Qt Q_OBJECT 类

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:23 25 4
gpt4 key购买 nike

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

我想要的是能够将任意函数绑定(bind)到 Qt 信号。 Qt 信号无法做到这一点,boost 信号可以。所以,我需要一个 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

关于c++ - 实用地生成 Qt Q_OBJECT 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4320002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com