问题标签 [moc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - CMake:“AUTOMOC”功能跳过可执行目标的来源?
有一个顶级的中型项目,CMakeLists.txt
它定义了一些常见的东西并调用项目中所有工件(子项目)的配置,如下所示:
工件是静态/共享库或可执行文件(它们以某种方式相互依赖)。在此示例中,只有一个可执行文件:E
. qt4_wrap_cpp
当使用普通的旧版本处理 MOC时,一切都可以完美地配置和构建。
通过在顶部添加以下内容切换到(相对)新的AUTOMOCCMakeLists.txt
功能时:
静态/共享库的所有来源都AUTOMOC
很好。但是,可执行目标的源(E
在本例中)永远不会AUTOMOC
被编辑。
我已经尝试了两者MSYS Makefiles
和Ninja
生成器,并且两者都根本不为AUTOMOC
'ing 创建目标,而只是为可执行文件的源创建(对于静态/共享库目标AUTOMOC
,添加了 'ing 目标)。
- 有没有人已经经历过?
- 可能是什么原因?
- 闻起来像虫子吗?
更新
我找到了原因,讨论在CMake mailing list上。
qt - 从 cmake 为 QT5 生成的 MOC 文件中的错误
我使用为 QT5 生成 moc 文件
然后我使用将 moc 文件添加到 SRC
最后我使用添加可执行文件
但我在 moc 文件中收到错误消息:
我的理解是创建的 moc 文件中存在一些错误。但我无法控制它的创建方式。现在我该如何解决这个错误?
c++ - QObject:缺少 vtable 链接错误
我知道这个问题已经被问过很多次了,但我在这里和谷歌都找不到解决方案。
这是我的头文件
还有我的 CPP 文件:
这是错误日志:
它可能来自,signals
但我不确定...
c++ - 构建插件以扩展 Qt 应用程序
我决定将我的爱好项目应用程序(一个字典查找程序)转换为插件架构,以便将来能够为其他语言开发各种不同的字典。该应用程序是用带有 Qt (5.0.2) 的 Visual C++ 开发的。我将此标头添加到应用程序代码中以定义字典插件的接口:
接下来,我从“Qt library”模板为插件本身(使用 Qt Visual Studio 插件)创建了一个新项目,用于制作 dll。主头文件如下所示:
当我尝试构建它时,我在 Q_INTERFACES 行上从 moc 收到一个错误,指定我的插件应该实现的接口:
3>------构建开始:项目:jp_plugin,配置:Debug Win32 ------
3> Moc'ing jp_plugin.h...
3>F:\moje\src\cpp\winona\build \jp_plugin\jp_plugin.h(15): 错误: 未定义接口
========== 构建: 2 成功, 1 失败, 2 最新, 0 跳过 ========= =
看起来 moc'ing 发生在包含 dict_plugin.h 文件之前,因为当我在包含文件名中引入拼写错误时,它不会抱怨该文件不存在,只是使用相同的错误消息终止构建关于未定义的接口。
我究竟做错了什么?谢谢。
c++ - Qt MOC:何时使用默认构造函数和复制构造函数?
我必须将自己的类型添加到 Qt MetaObject System(注册元类型)。由于手动,必须满足以下要求:
- 默认构造函数
- 复制构造函数
- 析构函数
我的类对默认构造函数没有意义;它将仅为满足 QT MOS 而创建。但是:Qt 如何、何时以及为何调用默认 ctor?如果我的类存储指向动态创建的元素的指针会发生什么:MOS 会创建此类类的副本,然后将其删除并释放所有指针吗?
qt - 无法将包含 QObject 类的静态库包含到 Cascades 项目中
我在基于 Qt 的新 BB10 平台上工作。
我有一个静态库项目,它定义了一个QObject
类(基本上该类发送信号并有几个插槽)。该项目编译良好并为我提供了一个不错的libwhathever.a
文件
当我尝试在我的 Cascades 项目中包含这个库时,我在构建时遇到了这些错误:
- 对 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass::staticMetaObject 的未定义引用
- 对 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass::newQRCodeDetected(QString) 的未定义引用
- 对 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass::staticMetaObject 外部位置的未定义引用:c:\Developer\bbndk\target_10_1_0_2342\qnx6\usr\include\qt4\QtCore\qobject.h
- 对 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass::staticMetaObject 外部位置的未定义引用:c:\Developer\bbndk\target_10_1_0_2342\qnx6\usr\include\qt4\QtDeclarative\qdeclarative.h
- 对 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass::staticMetaObject 外部位置的未定义引用:c:\Developer\bbndk\target_10_1_0_2342\qnx6\usr\include\qt4\QtDeclarative\qdeclarative.h
- com::vasco::digipass::sdk::utils::qrcodescanner::MyClass 对 vtable 的未定义引用
- com::vasco::digipass::sdk::utils::qrcodescanner::MyClass 对 vtable 的未定义引用
我怀疑我错过了Q_OBJECT
处理宏的编译步骤。我在正确的轨道上吗?我听说过moc
,qmake
但我不知道如何或何时在我的构建过程中使用它们。
c++ - 如何在 Qt 中创建动态信号和插槽?
Qt 中的信号/槽机制是一种静态机制。这些类必须由 moc 编译器进行预处理。
现在我想在运行时动态创建信号和槽。
我已经有了一个可行的解决方案,但对我来说感觉就像一个黑客,尽管我使用的是公开可用的方法。
这是动态插槽的代码:
如您所见,我大量使用了 QMetaObject,尤其是槽的索引(方法计数)。
动态信号的代码是可比较的。
现在我的问题是:这个解决方案的未来证明如何,特别是因为我假设索引必须至少比 methodCount() 大一个?
c++ - MyClass::metaobject VS2005 的 Qt 链接问题
就在我开始之前,我已经搜索了 SO 和 Google 很长一段时间试图解决这个问题并且没有成功。
我正在尝试编译我的项目,该项目曾经使用某个库来提供基于 Windows 窗体的 GUI 功能。现在我的公司已经开始迁移到 Qt,我决定开始转换我的小型应用程序以支持 Qt。
起初,由于缺少标头,它根本无法编译。现在已排序,由于以下错误,我的最终 .exe 无法链接。
我们公司有一个小型的“Qt 测试应用程序”,它是用来玩的,这是我导入的地方。我可以很好地编译和链接。根据我收集到的信息,Qt 文件必须满足以下属性:
- 确保包含 QTDi
- 将 UIC 编译器添加到 UI 文件
- 将资源编译器添加到资源文件
- 将 MOC 编译器添加到创建的头文件中。
我注意到我缺少 MOC 构建工具命令,所以我将它们添加到我的 UI 文件的标题中。然而,这并没有改变链接问题。我读到我应该删除所有构建的文件并进行清理以解决它。这也不起作用。
我已经检查过了,并且 Q_OBJECT 是在类中定义的。
我正在使用带有 Qt 插件的 VS2005。但是,我没有为 Qt 启动新项目,我只是使用旧的 Visual Studio 解决方案/VCProj。
任何想法下一步去哪里?
qt - QMake moc 文件被命名空间混淆
我有一个看起来像的文件:
但是,当 Qt 生成 _moc 文件时,它错误地认为“AreaEditor”在命名空间“Engine”中,从而导致编译失败。
这是 QMake 生成的 moc 文件的示例片段:
应该是这样的:
头文件“Engine/World/Area.h”有一个名为“Area”的类,它位于命名空间“Engine”中(实际上,它位于“Engine::World::”,两个嵌套命名空间)。看起来像这样以某种方式使 QMake 感到困惑!
如果我删除#include,将其注释掉,一切都编译得很好(除了我必须预先声明'Area',然后只能将它用作类中的指针或引用)。
所以我尝试将#include 包装在“MOC_SKIP_BEGIN”中,我可以在其中找到看似过时的在线引用,希望 QMake 会跳过该标题。不,仍然无法编译。
有没有一种方法可以编译它,同时仍然能够包含我想要包含的标头?
c++ - Visual Studio 2012 不生成 moc 文件
我在 Visual Studio 2012 中使用 Qt V5.1.0 和 Qt-Addin 1.2.2。
我在解决方案中有两个项目,名为“Brain”和“GUI”。“Brain”定义为 Utility 项目,“GUI”定义为 Application 项目。我添加了“大脑”作为“GUI”的参考。
当我将一类“大脑”项目用于“GUI”cpp文件时。我收到链接错误,告诉我有未解析的外部符号。此外,“生成的文件”文件夹中没有 moc 文件。
我试图清理解决方案,但它不起作用。我还尝试将“生成的文件”文件夹删除到资源管理器和视觉工作室,但没有任何结果。我试图用谷歌找到一个解决方案,但一个对我有用。
你能帮我吗?