2016-02-04 10 views
10

Dowolny dobry sposób, aby zrobić pole wyboru tylko do odczytu, ale także nie jest wyszarzony (ledwo widoczny).Jak wykonać QCheckBox tylko do odczytu, ale nie do szarzenia

  1. Użyłem setEnabled(bool) który działa, ale wtedy jest pole wyszarzone i mało czytelny
  2. mogę zareagować na sygnał przełączania i przywrócić stan. Ale potrzebowałbym pewnego rodzaju flagi, aby określić, czy pole jest tylko do odczytu, a następnie zresetować stan sprawdzania, co oznacza, że ​​muszę utworzyć własną klasę CheckBox.
  3. setCheckable nie działa albo, że nie pozwala mi ustawić sprawdzenia stanu na wszystkich:

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

Więc najlepszą rzeczą mam jest użycie włączanie/wyłączanie i zaakceptować wyszarzone styl.

------- ------- Edit

Po stylesheet examples Miałem nadzieję, mogę ustawić styl niepełnosprawnego wyboru jak na jednej z zablokowaniem. Do tej pory nie udało się to. Bardziej szczegółowe: Zmiana ikony, jak w przypadku examples, nie działa dla mnie, może dlatego, że używam systemu Windows, a ikony nie są dostępne pod ścieżką, tak jak w przykładach.


PS: Podobne, ale tutaj

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

+0

Co masz na myśli przez "tylko do odczytu"? Pole wyboru nie rejestruje informacji, ale tylko stan czegoś. – Poriferous

+0

Readonly: Użytkownik nie może zmienić stanu pola wyboru, podobnie jak w QLineEdit, gdzie użycie nie może zmienić tekstu tylko do odczytu –

+1

Btw, nie rozumiem. Ale nieważne. –

Odpowiedz

10

Brak odpowiedzi zgodnie z poniższą mojego kodu:

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

Dzięki, tylko, aby dodać do tego. Zostawiasz pole wyboru "włączone" i "możliwe do sprawdzenia". To sprawia, że ​​kontrolka ignoruje zdarzenia myszy i nie może skupić się. – gimp3695

5

To jest rozwiązanie Devopia jako funkcję:

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