• QT解决方案中新建动态链接库工程,且继承于QObject,解决无法生成moc_XXX.cpp文件的问题,解决工程之间的引用问题


    问题描述:

    目的是利用QT和C++完成一套自动化设备的软件设计,在一个解决方案中有三个工程,分别是上位机(包括界面,MVC框架等)、运动部分工程、图像部分工程。如下图所示:

    其中StemCells为上位机(包括界面,MVC框架等)工程、SCSModuleMotion为运动部分工程,SCSModuleVision为图像部分工程,而且StemCells为QT Application工程,SCSModuleMotion和SCSModuleVision为QT Library工程(生成动态链接库)。

    问题来源于:因为SCSModuleMotion和SCSModuleVision需要与StemCells之前通过信号和槽来通信,所以这两个QT 动态链接库工程也需要继承于QObject类,并且需要有moc_XXXX.cpp文件,但是在新建了动态链接库时没有继承于QObject基类。

    这样这两个工程就不能通过signal和slot方式与上位机工程通信,并且直接编译程序也不会有moc文件生成。

    解决方法:

    1.首先如上图手动加上OBject基类;

    2.设置使可以生成moc文件:

      (1)选中需要生成moc文件的对应的.h文件,右击→属性→常规→右侧最后一项(项类型)→选择自定义生成工具→点击右下角应用→左侧常规下面对出一项(自定义生成工具)。      

      (2)然后点开自定义生成工具,此时右侧全是空的,找一个可以生成moc文件的.h文件,同样操作,仿照那个文件在这里填上自定义生成工具。

      (3)这时候,编译程序可以生成moc文件,并且保存在本地工程目录的Generated Files→Debug中,但是在VS界面该工程的Generated Files→Debug目录中没有该文件,这时需要邮寄Debug添加现有项将该文件加入。

    3.这时候编译工程礽有错,虽然生成了moc文件,但是仍会报错,大致内容是“找不到QObject基类”

      解决方法:因为新建后的工程没有继承于QObject基类,所以没有引用QObject的头文件(只在global.h文件中引用了#include <QtCore/qglobal.h>),

            只需要再添加#include <QtCore/QObject>即可。

    4. 此时编译的话可能还会报错,显示找不到QT执行程序的路径,这时候需要检查一下右击工程→属性→配置属性→调试→环境这里有没有把QT环境变量添加进来,如下图所示:

    这些都设置完,dll工程编译应该就没有问题了。

    5. 但是这时虽然编译工程没有错误了,但是当上位机工程引用该动态链接库工程时还会出错(各种无法引用的工程),这时候需要右击上位机工程→属性→通用属性→引用→将动态链接库工程添加至引用,如下图:

    将上述所有步骤做完之后,工程编译便没有错误了,并且都可以与上位机工程进行信号和槽的通信。

    另外在创建moc文件时,如果创建不正确需要重新创建或者moc文件又丢失了需要重新创建,这时只需要将对应的.h文件移除(不是删除)工程,然后再添加回来即可重新生成moc文件。

  • 相关阅读:
    /etc/alternatives
    linux Link
    JVM程序计数器
    面向对象的内存分析
    SpringBoot项目简单实现给邮箱发送验证码
    注解式SQL Select语句判空
    SQL Update时参数判空:传入参数为空时不更新对应字段,不为空时才更新
    MySQL数据库误Update找回数据的方法
    用户-角色-权限系统概述
    将一个数组转换为List
  • 原文地址:https://www.cnblogs.com/pupilLZT/p/10744735.html
Copyright © 2020-2023  润新知