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

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

Я хочу отключить вкладку "Дополнительно" всякий раз, когда логическое 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 ) ;
}

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

ui->tabAdvanced->setEnabled(false);

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

bool result = false;
if (result == false)
{
  tabWidget->widget(1)->layout()->setDisabled(true);
}
Другие вопросы по тегам