【问题标题】:Qt programming: serial port communication module/pluginQt编程:串口通讯模块/插件
【发布时间】:2011-05-24 10:47:20
【问题描述】:

首先请让我解释一下我要做什么:

  1. 我正在使用 Qt 构建一个主要基于 webkit 的应用程序。该应用从互联网上获取内容并以传统的网络方式呈现给用户。

  2. 我的应用程序必须与许多串口设备通信,例如打印机、IC 读卡器。

  3. 这些串口设备型号不同,通信协议也不同。

  4. 我想将我的应用与串口设备通信部分分开,这样我就只能更新通信部分,而不更新所有应用。

我是否需要编写一个 Qt 插件/webkit 插件,或其他方式来做到这一点?欢迎提出任何建议!

谢谢

【问题讨论】:

    标签: c++ qt plugins webkit serial-port


    【解决方案1】:

    AFAIK Qt 已经提供了插件机制。

    查看QLibrary 类和那里的示例。

    【讨论】:

      【解决方案2】:

      对于串口部分qextserialport

      【讨论】:

      • 我已准备好将其放入我的应用程序中。我的问题是如何使它成为模块/插件
      【解决方案3】:

      通过在另一个 qmake 文件中使用 TARGET = lib 和 CONFIG += dll 在 dll/动态库中构建您的通信部分。

      【讨论】:

        【解决方案4】:

        我建议使用 C++ 的 PluginManager 样式插件方法之一。

        我是根据 2 岁以上的记忆来写这篇文章的,所以它只是作为一个松散的指南,而不是一个明确的答案。

        我在一个网站上添加了link,我曾经开始从事几年前您描述的项目。它与我们现有的 40 多个插件配合得很好。

        如果您不喜欢我链接的站点,搜索 [DLL 插件 C++ 类] 应该可以找到几个站点。

        您必须针对您的环境/编译器/操作系统等进行更正。

        本质上,假设您希望能够在插件中打开、读取、写入和关闭串行端口。

        创建一个纯虚拟基类(作为在 Java 中声明为接口的东西):

        /* 这是每个插件 DLL 必须包含的基本插件头文件 使用您的编译器编译指示/关键字从 DLL 导出整个类 在 Microsoft 领域,关键字是 _declspec( dllexport ) 来导出类 从基础 DLL 和 __declspec( dllimport ) 将类导入其他 代码。我在这里使用 MS 关键字,因为我不记得这是如何完成的 在其他编译器中。 :) */ #if BUILDING_BASE_PLUGIN /* 您正在编译导出插件库的 DLL #define BASE_DLL_EXPORT declspec(dllexport) #别的 /* 你正在编译使用插件库的代码 #define BASE_DLL_EXPORT declspec( dllimport ) #万一 类 DLL_EXPORT SerialPortPluginBase { 民众: 枚举 SerialPortPluginError{ SUCCESS = 0, ERROR_1, ERROR_2, ERROR_ETC }; virtual SerialPortPluginError Open( /*Parameters*/ ) = 0; virtual SerialPortPluginError Read( /*Parameters*/ ) = 0; virtual SerialPortPluginError Write( /*Parameters*/ ) = 0; virtual SerialPortPluginError Close( /*Parameters*/ ) = 0; 静态 std::string pluginName = "SerialPortPluginBase"; 静态 int 版本; };

        在每个插件中,实现基于上述类的接口以及使用插件管理器注册/注销 DLL 的方法(参见下面的链接)。

        每个插件都应该放在一个单独的 DLL/SO 中。

        有关完整示例,请参阅this site

        希望这会有所帮助。 :)

        【讨论】:

          【解决方案5】:

          您想要为您的应用程序创建一个 Qt 插件:

          http://doc.qt.io/archives/qt-4.7/plugins-howto.html

          您将能够通过插件扩展您的主应用程序。您唯一需要添加到应用程序的是加载插件的过程并添加一些事件以调用插件方法。

          【讨论】:

            猜你喜欢
            • 2013-08-04
            • 2011-07-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多