我有一个小部件,显示一个设置列表,用户可以通过(取消)复选框来设置设置。启用/禁用设置的过程可能要花费一些时间,因此我实现了“进行中”的可视化表示,以避免在作业尚未完成时用户多次单击:
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)
}
但是,我没有想到的副作用开始出现:当您选中任何复选框时,由于
checkBox.SetEnabled(false)
,焦点跳到设置列表中的下一个复选框。这引起了应用程序UI的跳动,因为肉眼可以注意到对下一个复选框的关注。如何防止焦点从要禁用的复选框跳开?还是有一种更好的方法来实现我所追求的效果(暂时阻止用户输入并使其可见被阻止)?
最佳答案
我认为最好使用默认值为true的二进制开关变量(名为allowClickCheckBox)。
然后在复选框的处理程序中包含以下代码:
if (allowClickCheckBox == false)
{
if(ui->myCheckbox->isChecked() )
ui->myCheckbox->setCheckState(Qt::unChecked);
return;
}
allowClickCheckBox = false;
...
//do your job
...
allowClickCheckBox = true;
很抱歉我可能出现语法错误。
关于qt - 如何继续关注要禁用的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58325665/