2015-04-17 43 views
6

Ho un tariffario chiamato QTabWidget. Ha tre schede: "Base", "Avanzate" e "Struttura attuale". Le schede sono visualizzate nel widget in questo ordine.Come disabilitare una scheda in un QTabWidget?

Desidero disattivare la scheda "Avanzate" ogni volta che il booleano result è falso. Ho pensato che sarebbe stato più semplice di questo codice:

bool result = false; 
if (result == false) 
{ 
    tabWidget->widget(1)->setDisabled(true); 
} 

Purtroppo, questo codice non disabilita la scheda, esso rimane abilitata anche quando lo controllo:

tabWidget->tabBar()->isTabEnabled(1); // This returns true 

perché non la scheda diventare disabili? C'è un altro modo per farlo?

Sto usando Qt 5.4.0.

risposta

17

È possibile abilitare/disabilitare le singole schede in un QTabWidget utilizzando la funzione di membro setTabEnabled(int index, bool enable).

Sulla base di snippet di codice, sarebbe simile a questa:

bool result = false; 
if (result == false) 
{ 
    tabWidget->setTabEnabled(1, false); 
} 
+2

O più succintamente: 'tabWidget-> setTabEnabled (1, risultato);' – TonyK

1

Non puoi, non in questo modo.

Devi scorrere tutti i bambini nella pagina e disabilitarli.

Qualcosa di simile a questo:

QList<QWidget*> list = parentWidget->findChildren<QWidget*>() ; 
foreach(QWidget* w, list) { 
    w->setEnabled(false) ; 
} 
+0

Questo è quello che mi serviva. Previene la modifica del contenuto della scheda, ma mantiene la visibilità della scheda. –

0

Si potrebbe disabilitare il layout della scheda.

bool result = false; 
if (result == false) 
{ 
    tabWidget->widget(1)->layout()->setDisabled(true); 
}