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

亦夜 2020-11-13 09:41:51
一个项目里面分成了很多的模块,我现在需要实现的功能就是,我上传文件之后,需要调用到另一个模块的渲染功能(并不是在当前模块渲染),就是类似手动去触发一下插槽函数,当前模块没办法直接引用到另一个模块的头文件,这种情况我要怎么在上传文件之后去调用一次另一个模块的函数呢,求解!
...全文
399 1 收藏 6
写回复
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]
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告