• 1650阅读
  • 2回复

[提问]QT中如何实现父类发送信息给子类,信息槽? [复制链接]

上一主题 下一主题
离线aimeini
 

只看楼主 倒序阅读 楼主  发表于: 2021-08-30
1.我有四个界面,比如说前两个Home(主界面)和Name,因为都用到了touchevent,所以想做个自定义的widget,也就是MyWidget,像代码里那样用,touchevent功能正常。Home有个按钮可跳转到Name。
  1. Home::Home(QWidget *parent)      //作为界面在main中show();
  2.     : MyWidget(parent),
2.每个界面都要用到背景更换、返回主界面的操作,有的要开始暂停,所以我又做了个widget来作为菜单页,菜单页里放上各类按钮,用来实现功能,(主要是考虑到页面整洁不想加按钮和菜单栏),通过MyWidget的双击事件调出,功能正常。菜单页继承自QWidget,通过在MyWidget里实例化实现。
3.假设我现在从Home跳转到Name页,双击后调出菜单页,比如点击菜单页上的一个按钮实现“关闭菜单页,关闭Name,显示Home页的操作”,现在可以实现发送信号给MyWidget,但无法操作Home和Name。
4.我尝试了在Home实例化菜单类,再通过connnect连接,但槽函数没有执行,我想是在这实例化的菜单类不是打开的菜单页,所以无法建立连接,所以退一步,先同MyWidget建立连接(毕竟打开的菜单页在这里实例化的),再想办法让父类MyWidget发送信号连接子类Home的槽。
在这里并没有对MyWidget或者Home进行实例化,所以不是父子窗口的信号连接问题
所以,我想干的事是:在通过菜单页按钮操作Home和Name上,问题的关键是:父类MyWidget发送信号连接子类Home的槽,其实我没找到相关的问题,所以这条路可能走不通,想再看看有没有其他路子
离线suzhuorui

只看该作者 1楼 发表于: 2021-08-30
QT信号槽yyds,再不行用回调试试
离线fsu0413

只看该作者 2楼 发表于: 2021-09-04
信号写在mywidget里,举个例子命名为menuActioned(),home作为继承类,里面直接就有信号,在home的构造函数里就可以链接槽
给菜单widget加个变量,举个例子命名为myWidget,类型是mywidget*,用来存储打开菜单widget的界面,在双击事件调出的时候将双击事件的this传给菜单widget
菜单widget新增槽函数,举个例子命名为slotMenuActioned(),在里面emit myWidget->menuActioned()
菜单项actioned信号链接slotMenuActioned信号槽

这样就大功告成了
快速回复
限100 字节
 
上一个 下一个