Как сделать QCheckBox только для чтения, но не затененным

Любой хороший способ сделать checkbox readonly, но также не серый > (едва заметен).

  • Я использовал setEnabled(bool), который работает, но этот флажок затемлен и едва читается
  • Я могу реагировать на сигнал переключения и reset состояние. Но мне нужен какой-то флаг, чтобы определить, доступно ли окно только для чтения, а затем reset состояние проверки, значит, мне нужно создать свой собственный класс CheckBox.
  • setCheckable тоже не работает, он не позволяет мне установить проверенное состояние вообще:

        cb = this->ui->cb_RealWorld->isCheckable();
        this->ui->cb_RealWorld->setCheckable(true);
        this->ui->cb_RealWorld->setChecked(someValue);
        this->ui->cb_RealWorld->setCheckable(cb);
    

Поэтому лучше всего использовать функцию enable/disable и принять стиль с серым цветом.

------- Изменить -------

Следуя примерам стилей, я надеялся, что смогу установить флажок отключенного типа, как тот, который включен. До сих пор не удалось сделать это. Более конкретно: изменение значка, как в examples, не работает для меня, возможно, потому, что я использую Windows, и значки недоступны по пути, как в примерах.


PS: Связанный, но здесь нет ответа

Отключить QCheckbox непростым способом
Qt - Как отключить QCheckBox при сохранении состояния проверки?

Ответ 1

Следуя ниже моему коду:

this->ui->cb_RealWorld->setAttribute(Qt::WA_TransparentForMouseEvents);
this->ui->cb_RealWorld->setFocusPolicy(Qt::NoFocus);

Ответ 2

Это решение Devopia как функция:

void SetReadOnly(QCheckBox* checkBox, bool readOnly)
{
   checkBox->setAttribute(Qt::WA_TransparentForMouseEvents, readOnly);
   checkBox->setFocusPolicy(readOnly ? Qt::NoFocus : Qt::StrongFocus);
}