最近有个需求:在业务开始时,线程自动向每个按钮发送clicked()信号,按钮接收到该信号后,执行该信号,从而模拟人单击按钮,但整个过程按钮不能接收键盘鼠标事件,防止人干扰线程自动模拟按钮的执行。首先想到的是调用按钮的setEnable(false)函数,这样确实可以使按钮不接收键盘鼠标消息了,但按钮也不响应 clicked()信号了,正确的做法是利用如下代码:
pBtn->setAttribute(Qt::WA_TransparentForMouseEvents, true);
pBtn->setFocusPolicy( Qt::NoFocus);