我的项目是为两个不同规格的电压箱子设计控制软件和界面,两个电压箱的基本区别是数据传输协议。所需做的工作是一样的。
这次的设计方式是把两个不同的电压箱类制作成插件的形式,用户打开软件的时候可以自动选择插件。两个电压箱类有一个父类来定义共同需要的函数,以及一部分虚函数来让子类分别实现其功能。
插件的制作过程现在想到两种方式:
第一种是把电压箱父类单独作为一个项目,生成动态链接库。运用其头文件和动态链接库被“静态”链接到子类项目中。编译子类项目生成动态链接库,子类dll连父类dll然后子类dll作为插件供界面控制类使用。
第二种方式是做一个全是虚函数的父类interface,然后让父类作为这个interface以及其他类的共同派生类,例如我的电压箱父类是QObject和interface的子类。interface里面的虚函数在父类或者子类的源文件里面实现。编译时候发现因为我把父类头文件和源文件放进其中一个子类的项目中,另一个子类在变异过程中因为调用了父类的一些信号和槽函数,但是该项目路径下没有包含父类文件,导致运行qmake时候不会自动连接父类生成的moc_device.cpp文件造成编译失败。所以要在该子类添加已有文件,把父类文件添加进来然后进行编译。
代码代码代码。