首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定QPushButton的释放信号是自动重复的结果还是实际的鼠标释放

如何确定QPushButton的释放信号是自动重复的结果还是实际的鼠标释放
EN

Stack Overflow用户
提问于 2016-10-12 23:50:54
回答 1查看 526关注 0票数 3

我有一个QPushButton,它执行两个操作。每次调用按钮的按下插槽时,都应该发生一个操作,包括通过autoRepeat调用。第二个操作应该在按钮第一次被按下时开始,只有在用户不再按住按钮时才结束。

问题是autoRepeat会触发按钮的按下、释放和单击信号。这会导致第二个操作在每次重复时结束并再次开始,而不是在按住按钮的持续时间内持续。如何仅使用现有的按下和释放插槽来确定按钮是否由用户实际释放?

示例代码:

代码语言:javascript
复制
void MyClass::on_button_pressed()
{
    startHeldAction();
    doRepeatedAction();
}

void MyClass::on_button_released()
{
    stopHeldAction();
}
EN

回答 1

Stack Overflow用户

发布于 2016-10-12 23:50:54

我发现采取以下步骤提供了一个相对简单的解决方案,不需要任何额外的事件处理:

  1. 创建一个bool类型的类成员isHeld,该默认值为false。
  2. 在按下的插槽中,检查isHeld。如果为false,则将isHeld设置为true,并调用startHeldAction().
  3. Within将释放的插槽检查按钮的down property。如果为false,则将isHeld设置为false并调用stopHeldAction().

进行这些更改会生成以下代码:

代码语言:javascript
复制
void MyClass::on_button_pressed()
{
    if( !isHeld )
    {
        isHeld = true;
        startHeldAction();
    }
    doRepeatedAction();
}

void MyClass::on_button_released()
{
    if( !ui->button->isDown() )
    {
        isHeld = false;
        stopHeldAction();
    }
}

这之所以有效,是因为除非用户实际释放了鼠标按钮,否则isDown()将在已释放的插槽中返回true。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40002970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档