Как сохранить фокус на флажок, который вы отключаете - PullRequest
0 голосов
/ 10 октября 2019

У меня есть виджет, который отображает список настроек, которые пользователь может установить, сняв флажок. Процесс включения / отключения настройки может занять некоторое время, поэтому я реализовал визуальное представление «в процессе», чтобы избежать нескольких кликов от пользователя, пока работа еще не завершена:

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). Это приводит к тому, что пользовательский интерфейс приложения начинает нервничать, так как фокус на следующем флажке заметен на глаз.

Как я могу удержать фокус от скачка с флажка, который я собираюсь отключить? Или есть лучший способ добиться эффекта, к которому я стремлюсь (на какое-то время блокируется пользовательский ввод и становится видимым, что ввод заблокирован)?

1 Ответ

0 голосов
/ 11 октября 2019

Я думаю, что лучше использовать двоичную переменную переключателя (с именем allowClickCheckBox), которая по умолчанию имеет значение true. затем поместите этот код в обработчик флажка:

if (allowClickCheckBox == false)
{
    if(ui->myCheckbox->isChecked() )
        ui->myCheckbox->setCheckState(Qt::unChecked);
    return;
}

allowClickCheckBox = false;
...
//do your job
...
allowClickCheckBox = true;

извините за мои вероятные синтаксические ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...