我有一个QPushButton,它执行两个操作。每次调用按钮的按下插槽时,都应该发生一个操作,包括通过autoRepeat调用。第二个操作应该在按钮第一次被按下时开始,只有在用户不再按住按钮时才结束。
问题是autoRepeat会触发按钮的按下、释放和单击信号。这会导致第二个操作在每次重复时结束并再次开始,而不是在按住按钮的持续时间内持续。如何仅使用现有的按下和释放插槽来确定按钮是否由用户实际释放?
示例代码:
void MyClass::on_button_pressed()
{
startHeldAction();
doRepeatedAction();
}
void MyClass::on_button_released()
{
stopHeldAction();
}发布于 2016-10-12 23:50:54
我发现采取以下步骤提供了一个相对简单的解决方案,不需要任何额外的事件处理:
isHeld,该默认值为false。isHeld。如果为false,则将isHeld设置为true,并调用startHeldAction().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。
https://stackoverflow.com/questions/40002970
复制相似问题