当前位置: 代码迷 >> QT开发 >> 一个信号连接多个槽的有关问题
  详细解决方案

一个信号连接多个槽的有关问题

热度:59   发布时间:2016-04-25 04:20:49.0
一个信号连接多个槽的问题
如题,在多个窗口中,我有一个窗口中的1个信号连接另一窗口的多个槽函数时,我要只执行某个槽函数而不执行其他的槽函数有没有什么办法呢?
------最佳解决方案--------------------
引用:
我在B窗口就只有OK 和cancel两个按钮


实际上用户看到就2个按钮。一个OK_1按钮用来实现add功能,一个OK_2按钮用来实现edit功能,一个cancel,点击A窗口的add,则显示OK_1,隐藏OK_2,点击edit,则显示OK_2,隐藏OK_1。
OK_1和_OK_2同时只能显示一个,而且2个按钮的坐标是一样的


------其他解决方案--------------------
终于看明白了,这里需要这样,有两个按钮add、edit点击两个按钮完成不同的工作。
给两个按钮添加clicked槽,有了两个槽之后,
add槽:{
      InputIdalog dlg;
      if(dlg.exec == QDialog::Acceped){
              exit->appendtext(dlg.text());
      }

edit槽:{
    InputIdalog dlg;
    dlg.setText("要修改的text");
      if(dlg.exec == QDialog::Acceped){
              exit->appendtext(dlg.text());
      }
}
其实不用信号和槽。这是一般对话框的用法。
------其他解决方案--------------------
引用:
我有加参数的,我是想实现这样的效果:
1. 在A中点add按钮,弹出B,在B中输入数据按OK按钮后显示到A
2. 在A中点edit按钮,弹出B,在B中输入数据按OK按钮后显示到A
在B中,在b.cpp中connect(ui->OK_Btn, SIGNAL(clicked()), this, SLOT(emit_Msg()));
emit_Msg()函数中发送信号 ……


首先,我觉得你没有弄清楚信号槽的具体用法。你说不知道过来的信号是add的还是edit。
你在A中有2个button,一个add按钮,一个edit按钮。那这2个按钮的信号槽是分开的,分别是

connect(add_button, SIGNAL(click()), B, SLOT(slot()));
connect(edit_button, SIGNAL(click()), B, SLOT(slot()));

虽然这2个按钮在点击时发出的信号都是click,但是分别是由2个对象(add_button和edit_button)发送这个信号。就好像有A,B两个人,A会说话,B也会说话,但是这2个人说话我们是区分开来的。
------其他解决方案--------------------
给信号添加参数吧...要不就增加信号的种类了
------其他解决方案--------------------
我想实现当某个条件成立时,执行某个槽函数
------其他解决方案--------------------
貌似你可以直接这么去触发槽函数,条件判断成立的话,直接:

emit slotfun(); //slotfun()是槽函数


emit可以触发信号,也可以触发槽函数的,我隐约记得之前这么用过,楼主试下看可以不.
------其他解决方案--------------------
我是用emit,我是这样的,我点击一个按钮后触发一个槽函数,然后槽函数里emit。 我的意思是,我有A,B窗口,A emit 信号, B 接收信号, B有两个槽(fun1, fun2)函数都与同个信号相连,我要在B中当我想只执行1个槽函数时另一个槽函数不执行
------其他解决方案--------------------
因为我在A窗口中有tablewidget, 我想在B窗口中输入数据然后在A窗口中显示数据,我现在在A窗口中有添加数据和修改数据按钮,当点这些按钮时,在B窗口中输入数据后会发送信号过A,A怎么来判断是添加的数据还是修改的数据而执行对应的槽函数?
------其他解决方案--------------------
B窗口有多个可以输入数据的控件
------其他解决方案--------------------
我增加信号,每个槽对应一个信号的话,因为我是在B中按按钮后emit信号的,这样2个信号都会发送过去,都会执行啊,显示到tablewidget上就会有问题了
------其他解决方案--------------------
加参数吧,设个标志。
------其他解决方案--------------------
刚接触Qt, 如果我加了标志,是否要这样来写?而不是把这些connect放到构造函数里?

void Add_Edit::on_Add_Btn_clicked()

    b.show();
    if(flags == 0)
    {
       connect(&b,SIGNAL(singal1),this,SLOT(fun1));
  相关解决方案