Qt 如何将注意力集中在一个选中的复选框上';重新禁用
我有一个小部件,它显示用户可以通过(取消)勾选复选框来设置的设置列表。启用/禁用设置的过程可能需要一些时间,因此我实现了“正在进行”的可视化表示,以避免在作业尚未完成时用户多次单击:Qt 如何将注意力集中在一个选中的复选框上';重新禁用,qt,go,Qt,Go,我有一个小部件,它显示用户可以通过(取消)勾选复选框来设置的设置列表。启用/禁用设置的过程可能需要一些时间,因此我实现了“正在进行”的可视化表示,以避免在作业尚未完成时用户多次单击: func CheckBoxTransaction(transaction func() error, checkBox *widgets.QCheckBox) { checkBox.SetEnabled(false) checkBox.Repaint() // transaction()
func CheckBoxTransaction(transaction func() error, checkBox *widgets.QCheckBox) {
checkBox.SetEnabled(false)
checkBox.Repaint()
// transaction() sets the setting, can take a while
if err := transaction(); err != nil {
log.Println(err)
checkBox.SetChecked(!checkBox.IsChecked())
}
checkBox.SetEnabled(true)
}
然而,一个我没有预料到的副作用开始出现:当您勾选任何复选框时,焦点会跳到设置列表中的下一个复选框,因为复选框.SetEnabled(false)
。这会导致应用程序用户界面感到紧张,因为眼睛可以看到下一个复选框的焦点
如何防止焦点从要禁用的复选框跳转?或者有没有更好的方法来实现我所追求的效果(在一段时间内阻止用户输入并使其可见输入被阻止)?我认为最好使用二进制开关变量(名为allowClickCheckBox),它的默认值为true。 然后将此代码置于复选框的处理程序中:
if (allowClickCheckBox == false)
{
if(ui->myCheckbox->isChecked() )
ui->myCheckbox->setCheckState(Qt::unChecked);
return;
}
allowClickCheckBox = false;
...
//do your job
...
allowClickCheckBox = true;
对不起,我可能有语法错误