Как отключить одну вкладку в 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);
}