我有一个 QML 按钮,我想防止在我的函数调用完成之前单击该按钮。
我尝试了下面的代码,但它不起作用。按钮不会在 clicked
中切换启用/禁用信号。我猜绑定(bind)不会立即生效。
import QtQuick
import QtQuick.Control
Button {
onClicked: {
console.log('clicked')
this.enabled = false
do_something()
this.enabled = true
}
}
我也试过pressed
信号Button {
onPressed: {
console.log('pressed')
this.enabled = false
}
onClicked: {
console.log('clicked')
do_something()
this.enabled = true
}
}
但是 onClicked
信号根本没有被触发。
最佳答案
如果 enabled
属性绑定(bind)不起作用,您始终可以阻止自己调用您的函数:
Button {
onClicked: {
if (this.enabled) { // Don't allow multiple clicks
console.log('clicked')
this.enabled = false
do_something()
this.enabled = true
}
}
}
更新:为了回答您自己对问题的回答,我建议计时器的替代方法是
Qt.callLater()
.它本质上将在事件队列上发布一个事件,而不是直接调用该函数。这为其他处理提供了足够的时间。Button {
id: btn
onClicked: {
console.log('clicked')
this.enabled = false
Qt.callLater(callback);
}
function callback() {
do_something()
btn.enabled = true
}
}
但是我仍然想知道您是否曾经尝试过我的原始答案,因为我认为这要容易得多,而且应该可以。
关于qt - 如何防止 QML 按钮在短时间内多次点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65688478/