1

我为 编写了一个自定义插件QCanBus,它只是 socketcan 插件的副本,但已重命名,标识符已调整为新名称。

我做了那个复制,在我改变它之前首先让插件被识别。

我将 qmake 项目更改为这样:

TEMPLATE = lib
TARGET = qtcopysocketcanbus
CONFIG += plugin
QT = core serialbus

HEADERS += \
    copysocketcanbackend.h

SOURCES += \
    main.cpp \
    copysocketcanbackend.cpp

DISTFILES = plugin.json

并添加了plugin.json类似的内容:

{
    "Key": "copysocketcan"
}

然后我将其他所有内容重命名为socketcanto copysocketcanmain.cppthecopysocketcan.cpp和 the copysocketcan.h

当我构建项目时,我得到了我放入$QT_PLUGIN_PATH/canbus/目标的 *.so 文件。

但是,快速入门显示,qt 只列出了安装附带的插件,而不是我添加的自定义插件。

我尝试将QLoggingCategory::setFilterRules(QStringLiteral("qt.canbus* = true"));第一行放在我的代码中,并希望获得更多的调试输出,但我只得到我自己的应用程序正在生成的调试输出。实际没有输出QCanBus

所以我的问题是

  1. 如何启用调试输出qt.canbus?我是否必须为此使用调试配置构建 QT?
  2. 我创建插件的方法合理吗?
  3. 任何想法,为什么没有列出自定义插件?
4

1 回答 1

1

通过有用的评论,我能够调试问题。评论者建议用于QT_DEBUG_PLUGINS调试插件调用。这导致出现错误消息,明确指出我尝试加载的插件因为它不是插件并且无法提取插件元数据

在这些消息有帮助之后进行了一些谷歌搜索。

问题1的答案是:

是的,您显然可以使用调试信息构建 QT,以获取实际的日志输出。就我而言,我配置了框架--force-debug-info

对于第二个问题,我的方法确实是合理的,因为作为问题 3 的答案,结果表明必须尽快包含moc文件,因为Q_OBJECT宏是在*.cpp文件中使用的,而不是在单独的标头中,这就是canbus 插件。您可以在此处阅读更多相关信息

于 2019-04-23T14:50:45.750 回答