2016-02-04 1 views
10

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

  1. Я использовал setEnabled(bool), который работает, но тогда флажок серого цвета и едва читаемый
  2. я могу реагировать на сигнале переключения и сброс состояния. Но мне нужен какой-то флаг, чтобы определить, является ли поле только для чтения, а затем сбросить состояние проверки, значит, мне нужно создать свой собственный класс CheckBox.
  3. 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); 
    

Так что лучшее, что я должен это использовать включить/выключить и принять посеревшую стиль.

------- Редактировать -------

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


PS: Схожая, но нет ответа здесь

Disabling a QCheckbox in a tricky way
Qt - How to disable QCheckBox while retaining checked state?

+0

Что вы подразумеваете под «только для чтения»? Флажок не записывает информацию, а только состояние чего-то. – Poriferous

+0

Readonly: Пользователь не может изменить состояние флажка, например, в QLineEdit, где использование не может изменить текст только для чтения. –

+1

Btw, я не понимаю нижний предел. Но не бери в голову. –

ответ

10

После ниже моего кода:

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

Спасибо, просто добавь к этому. Вы оставляете флажок «включен» и «проверяемым». Это просто делает так, чтобы элемент управления игнорировал события мыши и не мог сосредоточиться. – gimp3695

5

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

void SetReadOnly(QCheckBox* checkBox, bool readOnly) 
{ 
    checkBox->setAttribute(Qt::WA_TransparentForMouseEvents, readOnly); 
    checkBox->setFocusPolicy(readOnly ? Qt::NoFocus : Qt::StrongFocus); 
} 
Смежные вопросы