【发布时间】:2016-08-30 06:24:41
【问题描述】:
我想在QPushButton上实现鼠标左键的所有功能(如clicked()、pressed()、released()、setAutoRepeat())保留所有左键功能完好。这是重新实现 eventFilter 的代码,它没有给出理想的结果。
bool PreciseControl::eventFilter(QObject *, QEvent *event)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if(event->type() == QEvent::MouseButtonPress &&
mouseEvent->button()==Qt::RightButton )
{
emit rightMousePressed();
return true;
}
else if(event->type() == QEvent::MouseButtonRelease &&
mouseEvent->button()==Qt::RightButton )
{
emit rightMouseReleased();
return true;
}
if(event->type() == QEvent::MouseButtonPress &&
mouseEvent->button()==Qt::LeftButton )
{
emit leftMousePressed();
return true;
}
else if(event->type() == QEvent::MouseButtonRelease &&
mouseEvent->button()==Qt::LeftButton )
{
emit leftMouseReleased();
return true;
}
return false;}
有人可以帮忙吗?提前致谢。
【问题讨论】:
-
根据你的例子检查link的事件过滤器,这里指定我们需要在对象上安装事件过滤器。在您的情况下,按钮对象名称。其他方式,您可以从 QPushbutton 创建驱动类并编写自己的 QPushbotton 的 MouseEvent
-
请出示minimal reproducible example 并准确解释什么不起作用,“没有给出理想的结果”不够具体。
-
@Mailerdaimon 我想我已经提供了最小、完整和可验证的示例代码。至于“没有给出理想的结果”,让我说得更具体一些。在右键 press() 上,我没有获得自动重复功能,在左键上按下 leftMousePressed() 信号没有发出。希望这能稍微澄清一下。
-
@rugi 很高兴您得到的答案在某种程度上对您有所帮助。这表明这个问题并非不可用。但我的立场是,您的代码和描述既不完整也不可验证。再次阅读这篇文章,它将帮助您在下次提问时获得更多更好的答案。
标签: qt