问题标签 [qtplugin]
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.
qt - 已加载 Qt 样式插件但缺少密钥
我试图为我的项目创建一个样式插件,插件似乎正在加载,但为什么 QStyleFactory::keys() 没有返回我的密钥?通过将 QT_DEBUG_PLUGINS 设置为 1,我收到以下消息:
在我的主要()中:
最后一个 qDebug 语句打印:
qt - QPluginLoader 实例返回 null
问候
我创建了插件Qt (5.6.2)
并尝试加载它,但它一直返回null
。我检查了几个问题并尝试了解决方案,但它对我不起作用。
你能看看下面的代码,看看有什么问题吗?
设备管理器.hpp
DeviceManagerImpl.hpp
轮廓
这就是我尝试在我的主进程中加载插件的方式。
我使用 QT 5.6.2 和 QT Creator 和 MinGW 32 位。
编辑1: 我找到了原因,但我不知道为什么会导致问题,我使用链接到项目的库但是当我使用它的函数时,实例返回null。
我也没有编译或链接器错误。谁能告诉我这里有什么问题?
编辑2:
当CMakeList.txt
我使用Visual Studio
. (使用 CMake 制作)
这是.pro
文件中Qt Creator
的库和插件的配置,MinGW
当我使用该库时,这些配置不起作用。
所以我可以说它自己的代码很好,我肯定在.pro
文件中缺少一些配置。
INCLUDEPATH
PS1:插件和加载插件的应用程序,它们的 pro 文件中都有LIBS
库。
PS2:应用程序和插件都处于调试模式
PS3:我在编译期间没有收到任何编译错误或链接器错误。
编辑 3:
我制作了简单的控制台应用程序并包含了我的库头文件和 lib 文件并调用了该函数,这是我在运行应用程序时遇到的错误。所以一定是这样。但是说真的为什么!!!
编码:
PS:该库来自受信任的来源,并且可以与 Visual Studio 完美配合。
提前致谢。
qt - 在 Qt Creator 的控制台应用程序中调试共享插件
问候
我在 qt creator 的一个会话中有 2 个项目。一个是控制台应用程序,另一个是共享插件。我正在加载插件,然后调用它的方法。我想输入插件的方法并对其进行调试(如果您在一个解决方案中有项目,则如 Visual Studio)。是否可以?如果是,我该怎么做?
PS:我正在使用带有 MinGW 32 位的 Qt 5.6.2。
提前致谢
c++ - Qt 小部件插件在设计器中没有输出
我有一组要在 Qt Designer 中实现的自定义小部件。我已经成功构建了插件,并且已经输出.lib
了文件和.dll
文件。我成功地在 Qt Designer 中看到了我的所有小部件的列表。但是,当我将一个小部件拖到场景中时,什么也没有。现场什么都没有,光标什么也没有,什么都没有。我将提供我的一个小部件及其相应插件的相关代码。非常感谢您对此事的任何帮助/评论。
编辑:我被告知要为我的项目创建一个 MCVE,以使其易于编译和调试。所以我有。https://github.com/NickJohn547745/MaterialWidget-MCVE
qt - 用于配置的 Qt 插件选项
我正在尝试按照启用选项的说明构建qtvirtualkeyboard插件arrow-key-navigation
。但我不明白如何以正确的方式启用它。我试图添加
进入qtvirtualkeyboard.pro
没有任何成功。当我添加
进入src/virtualkeyboard/virtualkeyboard.pro
它有效,但我认为这是错误的方式。
c++ - 使用带有新信号槽语法的 Qt 插件系统在接口类中声明信号
我正在使用低级 Qt 插件 API为 Qt 应用程序构建一组插件。管理器对象将在运行时加载这些插件,并允许客户端程序访问任何可用的插件。我希望管理器通过信号和插槽与插件类进行通信,因为这些插件可能与管理器存在于不同的线程中。
所以每个插件必须实现的接口应该声明这些信号和槽。插槽没有问题,因为它们实际上只是每个插件必须实现的抽象成员函数。信号就是问题所在。
虽然信号可以在接口类中声明,但它们的定义是由 Qtmoc
在编译过程中自动生成的。因此我可以在接口类中定义这些信号,但是在创建实现接口的插件时,构建在链接处失败。这是因为信号的定义是在接口对象文件中,而不是在插件对象文件中。
所以问题是,如何确保Interface
在构建类时生成和/或链接类中Plugin
?
这是一个最小的,完整的例子来演示这个问题。
目录结构
在test.pro
:
在app/app.pro
:
在app/interface.h
:
在app/main.cc
:
在plugin/plugin.h
:
在plugin/plugin.pro
:
这可以通过qmake && make
从顶级目录调用来编译。
照原样Interface
继承自QObject
,因此它可以定义所有插件共享的信号。但是在编译plugin
子目录时,我们得到一个链接器错误:
这对我来说很有意义。moc
实现信号,因此Interface::name(QString)
实现及其相关符号在moc_interface.o
. plugin
该目标文件在构建子目录时既没有编译也没有链接,因此没有符号定义并且链接失败。
实际上,我可以很容易地解决这个问题,方法是在plugin.pro
文件中包含以下行:
或添加:
到结束plugin/plugin.h
。
这两个似乎都是一个坏主意,因为这些文件是在构建过程中自动生成的app
,而且我没有真正的方法来保证它们存在。我希望新插件的编写者只需要担心包含"interface.h"
标题,而不是这些自动生成的文件。
所以问题是,我怎样才能在构建时qmake
包含来自类的信号的定义?Interface
Plugin
相关问题:
我知道这个答案解决了一个密切相关的问题。但这使用连接信号和插槽的旧式“字符串化”版本。我更喜欢使用新的指向成员的语法,它提供编译时检查。此外,该解决方案需要ing 接口,这比让类直接继承自dynamic_cast
更容易出错且效率更低。Interface
QObject
c++ - 是否可以使用基类和派生类来实现 Qt 应用程序插件?
假设我有以下玩具界面:
我想在两个类中实现它:Base 和 Derived。
我错误的推理告诉我这应该有效。插件的抽象基类为接口的一部分提供功能,而派生类构成接口的其余部分。我可以通过一些明智的删除宏(基类元数据宏)来编译它。但是,生成的插件不会加载。所以我认为我的推理有问题,经验丰富的 Qt 开发人员或 c++ 开发人员可能会指出我看不到。
qt - 在运行时禁用 Qt 承载管理
Qt 网络承载管理(Win10 x64,Qt 5.9.latest)存在一些问题。注意到以下问题:
- WIFI接口无法识别
- 一个 WIFI 接口被标记为不可访问但工作(QAM 请求工作)
- 有线局域网不受影响
在某种程度上,我可以通过 从我的发行版中删除bearer
文件夹来解决这个问题。我知道我可以编译一个没有承载管理的 Qt 版本,但这是一个预编译的 Win64 版本,bearer
现在只有一个删除的文件夹。
- 我可以在运行时以某种方式动态禁用承载管理吗?
- 删除文件夹有风险吗?它似乎适用于我们的应用程序,但是否有一些预期的副作用会杀死应用程序?
对我们来说,它与 5.6.x 的承载管理一起工作,现在被 5.9.x 破坏了,我的 5.11.x IDE 版本(我用于开发)似乎仍然被破坏。
- - 编辑 - -
有了承载和WIFI和电缆,我看到了(WIFI适配器已连接但未显示)
如果没有承载,则不会显示网络配置,并且 QAM 报告“不可访问”(但有效)
只有承载和WIFI(工作)它看起来像没有承载: