自定义QPushButton按钮后,需要重写一下mouseEvent,结果发现按钮的clicked信号不会触发了:
bool MyButton::eventFilter(QObject *watched, QEvent *event)
{
Q_UNUSED(watched);
if(event->type() == QMouseEvent::MouseButtonPress)
{
timer->start(1000);
}
else if(event->type() == QMouseEvent::MouseButtonRelease)
{
timer->stop();
return true;
}
return false;
}
void MyButton::timeout()
{
qDebug() << "timeout";
}
这里我是有个需求,需要在鼠标释放时去触发一个超时的处理,因此在MouseButtonRelease时使用return true拦截了该事件,但是同时也拦截了鼠标释放时发送的released()信号,这样就会无法再触发clicked信号了,文档中也有写到clicked信号触发的条件:pressed后还要released才能emit。
尝试过手动emit released()信号也不行,目前只能手动调用click()的槽函数才能触发按钮的clicked信号了,后续有时间还需要仔细研究一下。