2015-04-17 28 views
6

Mam QTabWidget o nazwie tabWidget. Ma trzy zakładki: "Basic", "Advanced" i "Current Structure". Karty są wyświetlane w widgecie w tej kolejności.Jak wyłączyć jedną kartę w QTabWidget?

Chcę wyłączyć kartę "Zaawansowane", gdy wartość logiczna result jest fałszywa. Myślałem, że będzie tak proste, jak ten kod:

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

Niestety, ten kod nie wyłączyć kartę, pozostaje włączony nawet gdy sprawdzam go:

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

Dlaczego nie kartę stać się wyłączonym? Czy jest inny sposób na zrobienie tego?

Używam Qt 5.4.0.

Odpowiedz

17

można włączyć/wyłączyć poszczególne zakładki w A QTabWidget za pomocą funkcji składowej setTabEnabled(int index, bool enable).

podstawie fragmentu kodu, by to wyglądać tak:

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

Lub bardziej zwięźle: 'tabWidget-> setTabEnabled (1, result);' – TonyK

1

Nie możesz, nie w ten sposób.

Musisz przejrzeć wszystkie dzieci na stronie i wyłączyć je.

coś takiego:

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

Tego właśnie potrzebowałem. Zapobiega to zmianie zawartości karty, ale zachowuje widoczność karty. –

0

Można wyłączyć układ karcie.

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