C++ Qt 问题管理
**一、在VS里创建的解决方案下有两个项目,(1)动态库.dll项目(2)应用程序.exe项目。
**
1、在(1)里面创建信号void signalCardAxisStatus(Vector);
2、发布信号emit signalCardAxisStatus(vAxis);这里的vAxis是有值的
3、在(2)里创建槽函数void P19_I::slotCardAxisStatus(Vector vAxis){}
4、在(2)里建立连接connect(m_pCtrl, &MachineControl::signalCardAxisStatus, this, &P19_I::slotCardAxisStatus);
5、异常问题:结果是slotCardAxisStatus(Vector vAxis)实参vAxis是空的。
二、在QT VS Tools里创建的解决方案下有两个项目,(1)动态库.dll项目:MachineControl.dll 。(2)应用程序.exe项目:SeanProject。
1、在项目MachineControl.dll里面新建了MachineControl类,创建信号void signalCardAxisStatus(const Axis& axis);
2、用boost库里方法将MachineControl类里的方法void ThrdCardMonitor()被丢进线程池---> boost::asio::post(m_tp,
bind(&MachineControl::ThrdCardMonitor, this));在ThrdCardMonitor()方法里循环发送信号 signalCardAxisStatus;3、在项目SeanProject里新建了FrmMain类,ui界面,创建槽void slotCardAxisStatus(const Axis& axis);
4、在FrmMain里创建了MachineControl* m_pCtrl指针对象,在构造函数里建立连接connect(m_pCtrl, &MachineControl::signalCardAxisStatus, this, &FrmMain::slotCardAxisStatus);
5、异常问题,程序正常运行时,MachineControl里的emit signalCardAxisStatus(axis) 信号能发射,FrmMain里的槽函数slotCardAxisStatus没有接收到信号?
调试代码,找了很久没有找到原因,晕死。。。。
在不断尝试后,发现了两种方法可以解决
1、在MachineControl里创建个QTime对象,将信号放在定时器里面去发射,但是这种方法主界面有时会卡顿,原因未知;
2、在FrmMain里将//connect(m_pCtrl, &MachineControl::signalCardAxisStatus, this, &FrmMain::slotCardAxisStatus);换成lambda 表达式的形式:connect(m_pCtrl, &MachineControl::signalCardAxisStatus, [=](const Axis& axis) {slotCardAxisStatus(axis); });完美解决,
最后选用方法2解决问题,但是为什么就不知道了,C++的博大精深,我辈还是需要静下心来,好好学习。。。。