gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:58:38 28 4
gpt4 key购买 nike

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

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

示例代码:

void MyClass::on_button_pressed()
{
startHeldAction();
doRepeatedAction();
}

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

最佳答案

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

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

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

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,除非用户实际上释放了鼠标按钮。

关于c++ - 如何确定 QPushButton 的释放信号是自动重复还是实际鼠标释放的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40002970/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com