C++ Qt 问题管理

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++的博大精深,我辈还是需要静下心来,好好学习。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值