未加载qt的自定义插件。如何调试?

时间:2019-04-17 16:04:14

标签: qt qt5 can-bus socketcan qtplugin

我为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"
}

然后我将socketcancopysocketcanmain.cpp中的其他所有内容从copysocketcan.cpp重命名为copysocketcan.h

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

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

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

所以我的问题是

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

1 个答案:

答案 0 :(得分:0)

通过有帮助的评论,我能够调试问题。评论者建议使用QT_DEBUG_PLUGINS调试插件调用。这导致出现一条错误消息,清楚地表明,我正在尝试加载的插件是因为不是插件,并且无法提取插件元数据

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

问题1的答案是:

是的,您显然具有通过调试信息进行构建的QT,以获取实际的日志输出。 就我而言,我使用--force-debug-info

配置了框架

对于第二个问题,我的方法的确是合理的,因为对问题3的回答表明,必须在{内使用moc宏,以便尽快包含Q_OBJECT文件。 {1}}文件,而不是在单独的标头中(canbus插件就是这种情况)。您可以了解有关here

的更多信息