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;
对不起,我可能有语法错误