Как отключить одну вкладку в QTabWidget?

у меня есть QTabWidget называют tabWidget. Он имеет три вкладки:" Basic"," Advanced "и"текущая структура". Вкладки отображаются в виджете в указанном порядке.

Я хочу отключить вкладку "Дополнительно" всякий раз, когда Boolean result - Это ложь. Я думал, что это будет так просто, как этот код:

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

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

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

Почему вкладка не отключается? Быть там другой способ сделать это?

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

4 ответов


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

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

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

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

вы должны перебрать все дочерние элементы на странице и отключить их.

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

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

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

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

Если вы используете шаблон приложения Qt Widgets и имя расширенной вкладки -tabAdvanced (вы можете проверить имя в Инспекторе объектов), это должно работать:

ui->tabAdvanced->setEnabled(false);