2016-02-04 16 views
10

Qualsiasi buon modo per rendere una casella di controllo in sola lettura, ma anche non visualizzato in grigio (difficilmente visibile).Come rendere QCheckBox in sola lettura, ma non in grigio

  1. Ho usato setEnabled(bool) che funziona, ma la casella di controllo poi è in grigio e difficilmente leggibile
  2. posso reagire a un segnale di commutazione e ripristinare lo stato. Ma avrei bisogno di un tipo di flag per determinare se la casella è di sola lettura e quindi ripristinare lo stato di controllo, significa che ho bisogno di creare la mia classe CheckBox.
  3. setCheckable non funziona neanche, non mi permette di impostare uno stato controllato a tutti:

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

Quindi la cosa migliore che ho è quello di utilizzare abilitare/disabilitare e accettare il grigio stile.

------- ------- Modifica

Dopo la stylesheet examples Speravo di poter impostare lo stile di una casella di controllo disabile come quella di un permesso. Non è riuscito finora a farlo. Più specifico: cambiare l'icona come nel examples non funziona per me, forse perché sto usando Windows e le icone non sono disponibili sotto il percorso come negli esempi.


PS: Related, ma nessuna risposta qui

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

+0

Cosa intendi per "sola lettura"? Una casella di controllo non registra le informazioni ma solo lo stato di qualcosa. – Poriferous

+0

Readonly: l'utente non può modificare lo stato della casella di controllo, come in QLineEdit dove l'uso non può modificare un testo readonly –

+1

Btw, non capisco il downvote. Ma non importa. –

risposta

10

A seguito del seguito il mio codice:

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

Grazie, solo per aggiungere a questo. Si lascia la casella di controllo come "abilitato" e "selezionabile". Questo rende solo così il controllo ignora gli eventi del mouse e non può avere la messa a fuoco. – gimp3695

5

Questa è la soluzione di Devopia in funzione:

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