当前位置: 代码迷 >> QT开发 >> 信号与槽有关问题
  详细解决方案

信号与槽有关问题

热度:101   发布时间:2016-04-25 04:27:56.0
信号与槽问题
C/C++ code
sz和RenderArea类,打算使用信号与槽通信,将sz中的变量enableDraw发送到RenderArea中。但实现不了,进不了槽函数getDrawSignOfSZ中。求解释。sz类:信号:signal:void emitEnableDrawSign(bool)发射信号:void sz::onDrawButtonClicked(void){enableDraw = true;emit emitEnableDrawSign(enableDraw);}RenderArea类:构造函数中:sz * temp = new sz;connect(temp,SIGNAL(emitEnableDrawSign(bool),this,SLOT(getDrawSignOfSZ(bool))));void RenderArea::getDrawSignOfSZ(bool b){enableDrawOfSz = b;}槽:public slots:void GetDrawSignOfSz(bool b)


------解决方案--------------------
槽函数名字不对。。应该有提示的运行时候。GetDrawSignOfSz应该是大写哈。你连接的时候是小写。
connect(temp,SIGNAL(emitEnableDrawSign(bool),this,SLOT(getDrawSignOfSZ(bool))));
------解决方案--------------------
问题分两部分:
在发射信号处添加qDebug()<<"?????";
槽里也添加一个,看看是没发射还是没连接好。
------解决方案--------------------
C/C++ code
connect(temp,SIGNAL(emitEnableDrawSign(bool),this,SLOT([color=#FF0000]getDrawSignOfSZ[/color](bool))));public slots:void [color=#FF0000]GetDrawSignOfSz[/color](bool b)
------解决方案--------------------
C/C++ code
connect(temp,SIGNAL(emitEnableDrawSign(bool),this,SLOT(getDrawSignOfSZ(bool))));public slots:void GetDrawSignOfSz(bool b)
------解决方案--------------------
槽函数名称写错了
------解决方案--------------------
Qt4的信号槽 connect在编译时是不检查的。
在运行时。通过metaobject,类似字符串比较进行的。
你运行的时候output view里肯定会有 getDrawSignOfSZ不存在的字样。

还有。你要确保connect是在emit 信号之前执行的。

ps:另外的一个贴关了把。
------解决方案--------------------
qDebug() << "your string" 你可以理解成 std::cout << "your string".在控制台中打印出你的变量。
------解决方案--------------------
C/C++ code
void GetDrawSignOfSz(bool b)
  相关解决方案