急向Mainwindow发送一个信号后怎么等待它的槽执行完毕后再执行剩余代码

急:向Mainwindow发送一个信号后如何等待它的槽执行完毕后再执行剩余代码?
本帖最后由 bazzi2011 于 2014-11-07 17:49:53 编辑
我在子窗口中的一个按钮中向mainwindow发送了一个信号,mainwindow在槽中执行完成后可以判断我子窗口的某些值的真假。最后我那个按钮中再根据这些值的真假进行相应的操作。
具体看代码:

void WidgetClass:: Btnclick()    
{
     if(ExistSomething)
    {
          //do something TRUE!!!
    }
    else
    {
          //do something FALSE!!!
     }
}  

void WidgetClass:: ExistSomething
{
      emit SignalAAA();
      if(b_exist) //b_exist是WidgetABC中的一个bool变量
      {
            return true;
      }
      else
      {
            return false;
      }
}

void MainWindow::SlotAAA()
{
    //这里 MainWindow可以得到我WidgetClass指针pWidgetClass;
    //然后根据其执行的内容对我的b_exist进行赋值:pWidgetClass->b_exist = true 或者 false
}

那么问题来了:我发现ExistSomething这个函数在执行完这局emit SignalAAA();
后立刻执行了
      if(b_exist)
      {
            return true;
      }
      else
      {
            return false;
      }

而这个时候mainwindow中的槽函数还没有执行完毕,我的b_exist还没有被赋值,由于b_exist初始化未false,故而ExistSomething直接返回了false,我就只能在按钮中执行FALSE分支。



我的需求很明了,就是希望在按钮中发送完信号,等待信号执行完毕之后,再执行按钮中的剩余代码。
当然我不一定采取这个思路,如何有其它的办法也可以教教小弟,谢谢了!
------解决思路----------------------
Qt本身就是信号发送完继续执行下一条语句,你理解上错了:
emit SignalAAA();改成获取MainWindow->SlotAAA(),不要用信号-槽方式了
------解决思路----------------------
同意一楼的说法,你如果非要这么用可以绑定SignalAAA和SlotAAA,并传递b_exit这个参数。并将你的if语句放到MainWidow中区实现。