qt - 如何继续关注要禁用的复选框

标签 qt go

我有一个小部件,显示一个设置列表,用户可以通过(取消)复选框来设置设置。启用/禁用设置的过程可能要花费一些时间,因此我实现了“进行中”的可视化表示,以避免在作业尚未完成时用户多次单击:

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/

相关文章:

Golang 如何将新包集成到我的图片上传代码中

random - 在最小值、最大值之间生成加密随机整数

go - 检查当前时间是否在给定的时间间隔内,GOLANG

c++ - Qt 4.8 endInsert/RemoveRows 导致内存泄漏?

c++ - 如何在我的 QMainWindow 中使用我自定义的最小化/关闭窗口按钮?

c++ - Windows 中的 Qt 库链接错误

go - 无法读取 UDP 回复(golang)

c++ - 将 STL 算法与 Qt 容器结合使用

c++ - 如何在不同的类中使用 QNetworkAccessManager?类之间重要数据的一般共享?

在包中定义的方法中调用的 Goroutine 不运行