同一个工程下,不同模块如何调用qt的插槽函数

亦夜 2020-11-13 09:41:51
一个项目里面分成了很多的模块,我现在需要实现的功能就是,我上传文件之后,需要调用到另一个模块的渲染功能(并不是在当前模块渲染),就是类似手动去触发一下插槽函数,当前模块没办法直接引用到另一个模块的头文件,这种情况我要怎么在上传文件之后去调用一次另一个模块的函数呢,求解!
...全文
553 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
一叶小舟_郭 2020-11-18
  • 打赏
  • 举报
回复
应该是吧,你代码不是很全,不知到两个函数分别是啥
weixin_43926061 2020-11-13
  • 打赏
  • 举报
回复
肯定你写的有问题啊 仔细看
亦夜 2020-11-13
  • 打赏
  • 举报
回复
引用 1 楼 过期小朋友、 的回复:
加油!我看了,但没看懂,领域不同!
我重新描述一下问题吧,可能上面说的不是很清楚 一个加载整个文件夹的模块,加载之后,会赋值给渲染模块需要的数据,赋值完成之后,我希望默认去调用渲染模块的渲染功能,其实就是个按钮, 我想手动去触发一下。 遇到的几个问题: 1、渲染按钮的事件函数是受保护成员在其他类无法直接调用。 2、文件加载模块,无法直接引入渲染模块的头文件,但是可以通过添加依赖路径引入(但是这样会让当前模块嵌入了其他模块的东西,尽可能不想这样) 3、我试图创建友元,但是提示我创建友元无效。 4、破除2的限制之后并把事件函数改成公共函数,会导致其他地方的未解析符号问题,但是可以调用,只是调用并没有进入功能实现的逻辑,而是直接返回了 5、我尝试复制函数内容在文件模块实现,但是要用到 Q_D();标识符,里面会初始化一个d对象,但是我在文件模块是没有这个Q_D标识符的,也没办法初始化d对象 我只是c++新手,所以上面可能是我自己钻进死胡同了,希望大家能提出自己的意见
过期小朋友、 2020-11-13
  • 打赏
  • 举报
回复
加油!我看了,但没看懂,领域不同!
亦夜 2020-11-13
  • 打赏
  • 举报
回复
引用 5 楼 一叶小舟_郭 的回复:
你是QT的么,文件加载模块定义信号,上层绑定信号到旋转模块的槽函数不就行了???子模块不相关啊.类似这样,代码全手写,将就看吧,你实际类不在同一个文件 没问题,只要类有就行,new对象自己写. 例如:

class A{
signals:
    void fileLoaded();
};
class B{
public slots: 
    void onFileLoaded(){
        //内部调用渲染
    } 
};
 class Core{
public:
    Core(){
         connect(a, SIGNAL(fileLoaded()), b,SLOT(onFileLoaded());
    }
public:
    A* a;
    B* b;
};
[quote=引用 3 楼 亦夜 的回复:][quote=引用 1 楼 过期小朋友、 的回复:]加油!我看了,但没看懂,领域不同!
我重新描述一下问题吧,可能上面说的不是很清楚 一个加载整个文件夹的模块,加载之后,会赋值给渲染模块需要的数据,赋值完成之后,我希望默认去调用渲染模块的渲染功能,其实就是个按钮, 我想手动去触发一下。 遇到的几个问题: 1、渲染按钮的事件函数是受保护成员在其他类无法直接调用。 2、文件加载模块,无法直接引入渲染模块的头文件,但是可以通过添加依赖路径引入(但是这样会让当前模块嵌入了其他模块的东西,尽可能不想这样) 3、我试图创建友元,但是提示我创建友元无效。 4、破除2的限制之后并把事件函数改成公共函数,会导致其他地方的未解析符号问题,但是可以调用,只是调用并没有进入功能实现的逻辑,而是直接返回了 5、我尝试复制函数内容在文件模块实现,但是要用到 Q_D();标识符,里面会初始化一个d对象,但是我在文件模块是没有这个Q_D标识符的,也没办法初始化d对象 我只是c++新手,所以上面可能是我自己钻进死胡同了,希望大家能提出自己的意见[/quote][/quote] 这是我渲染模块的槽函数

引用 5 楼 一叶小舟_郭 的回复:
你是QT的么,文件加载模块定义信号,上层绑定信号到旋转模块的槽函数不就行了???子模块不相关啊.类似这样,代码全手写,将就看吧,你实际类不在同一个文件 没问题,只要类有就行,new对象自己写. 例如:

class A{
signals:
    void fileLoaded();
};
class B{
public slots: 
    void onFileLoaded(){
        //内部调用渲染
    } 
};
 class Core{
public:
    Core(){
         connect(a, SIGNAL(fileLoaded()), b,SLOT(onFileLoaded());
    }
public:
    A* a;
    B* b;
};
[quote=引用 3 楼 亦夜 的回复:][quote=引用 1 楼 过期小朋友、 的回复:]加油!我看了,但没看懂,领域不同!
我重新描述一下问题吧,可能上面说的不是很清楚 一个加载整个文件夹的模块,加载之后,会赋值给渲染模块需要的数据,赋值完成之后,我希望默认去调用渲染模块的渲染功能,其实就是个按钮, 我想手动去触发一下。 遇到的几个问题: 1、渲染按钮的事件函数是受保护成员在其他类无法直接调用。 2、文件加载模块,无法直接引入渲染模块的头文件,但是可以通过添加依赖路径引入(但是这样会让当前模块嵌入了其他模块的东西,尽可能不想这样) 3、我试图创建友元,但是提示我创建友元无效。 4、破除2的限制之后并把事件函数改成公共函数,会导致其他地方的未解析符号问题,但是可以调用,只是调用并没有进入功能实现的逻辑,而是直接返回了 5、我尝试复制函数内容在文件模块实现,但是要用到 Q_D();标识符,里面会初始化一个d对象,但是我在文件模块是没有这个Q_D标识符的,也没办法初始化d对象 我只是c++新手,所以上面可能是我自己钻进死胡同了,希望大家能提出自己的意见[/quote][/quote] 这是我渲染模块的槽函数

QObject::connect(this->actionCenter, SIGNAL(triggered()),
                   q, SLOT(resetFocalPoint()));
// 你的意思就是在下面再加一个这种形式的吗?
QObject::connect(qIOManger, SIGNAL(loadNodes()),
                   q, SLOT(resetFocalPoint()));

一叶小舟_郭 2020-11-13
  • 打赏
  • 举报
回复
你是QT的么,文件加载模块定义信号,上层绑定信号到旋转模块的槽函数不就行了???子模块不相关啊.类似这样,代码全手写,将就看吧,你实际类不在同一个文件 没问题,只要类有就行,new对象自己写. 例如:

class A{
signals:
    void fileLoaded();
};
class B{
public slots: 
    void onFileLoaded(){
        //内部调用渲染
    } 
};
 class Core{
public:
    Core(){
         connect(a, SIGNAL(fileLoaded()), b,SLOT(onFileLoaded());
    }
public:
    A* a;
    B* b;
};
引用 3 楼 亦夜 的回复:
[quote=引用 1 楼 过期小朋友、 的回复:]加油!我看了,但没看懂,领域不同!
我重新描述一下问题吧,可能上面说的不是很清楚 一个加载整个文件夹的模块,加载之后,会赋值给渲染模块需要的数据,赋值完成之后,我希望默认去调用渲染模块的渲染功能,其实就是个按钮, 我想手动去触发一下。 遇到的几个问题: 1、渲染按钮的事件函数是受保护成员在其他类无法直接调用。 2、文件加载模块,无法直接引入渲染模块的头文件,但是可以通过添加依赖路径引入(但是这样会让当前模块嵌入了其他模块的东西,尽可能不想这样) 3、我试图创建友元,但是提示我创建友元无效。 4、破除2的限制之后并把事件函数改成公共函数,会导致其他地方的未解析符号问题,但是可以调用,只是调用并没有进入功能实现的逻辑,而是直接返回了 5、我尝试复制函数内容在文件模块实现,但是要用到 Q_D();标识符,里面会初始化一个d对象,但是我在文件模块是没有这个Q_D标识符的,也没办法初始化d对象 我只是c++新手,所以上面可能是我自己钻进死胡同了,希望大家能提出自己的意见[/quote]

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧