2015-04-17 3 views
6

У меня есть QTabWidget под названием tabWidget. Он имеет три вкладки: «Основные», «Дополнительно» и «Текущая структура». Вкладки отображаются в виджетах в этом порядке.Как отключить одну вкладку в QTabWidget?

Я хочу отключить вкладку «Дополнительно», когда Boolean result является ложным. Я думал, что это будет так просто, как этот код:

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

К сожалению, этот код не отключает вкладку, он остается включенным, даже когда я проверить это:

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

Почему не на вкладку стать инвалидом? Есть ли другой способ сделать это?

Я использую Qt 5.4.0.

ответ

17

Вы можете включить/отключить отдельные вкладки в виде QTabWidget с помощью функции члена setTabEnabled(int index, bool enable).

Основываясь на фрагмент кода, он будет выглядеть следующим образом:

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

Или более лаконично: 'tabWidget-> setTabEnabled (1, result);' – TonyK

1

Вы не можете, не так.

Вам необходимо пройти через всех детей на странице и отключить их.

Что-то вроде этого:

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

Это то, что мне нужно. Он предотвращает изменение содержимого вкладки, но сохраняет видимость закладки. –

0

Вы можете отключить макет вкладки.

bool result = false; 
if (result == false) 
{ 
    tabWidget->widget(1)->layout()->setDisabled(true); 
} 
Смежные вопросы