我为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"
}
然后我在socketcan
,copysocketcan
和main.cpp
中将其他所有内容从copysocketcan.cpp
重命名为copysocketcan.h
。
当我构建项目时,我得到了我的* .so文件,我把它放在我的目标上的$QT_PLUGIN_PATH/canbus/
。
但是,快速启动显示,qt仅列出安装附带的插件,而不是我添加的自定义插件。
我尝试将QLoggingCategory::setFilterRules(QStringLiteral("qt.canbus* = true"));
作为我的代码中的第一行,并希望获得更多的调试输出,但我只得到我自己的应用程序正在生成的调试输出。没有来自实际QCanBus
的输出。
所以我的问题是
qt.canbus
启用调试输出?我是否必须使用调试配置构建QT?通过一个有用的评论,我能够调试问题。评论员建议使用QT_DEBUG_PLUGINS
来调试插件调用。这导致出现错误消息,清楚地说明,我试图加载的插件因为它不是插件而且无法提取插件元数据。
在这些消息帮助之后进行了一些谷歌搜索。
问题1的答案是:
是的,你显然有QT用调试信息构建,以获得实际的日志输出。在我的例子中,我使用--force-debug-info
配置了框架
对于第二个问题,我的方法确实合理,因为问题3的答案结果是必须尽快包含moc
文件,因为Q_OBJECT
宏在*.cpp
文件中使用而不是在单独的标题中,这是canbus插件的案例。你可以阅读更多有关here的信息