14

我有一个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

4 回答 4

31

您可以使用成员函数setTabEnabled(int index, bool enable)启用/禁用 QTabWidget 中的各个选项卡。

根据您的代码片段,它看起来像这样:

bool result = false;
if (result == false)
{
  tabWidget->setTabEnabled(1, false);
}
于 2015-04-17T20:22:59.957 回答
0

你不能,不能这样。

您必须遍历页面中的所有子项并禁用它们。

像这样的东西:

QList<QWidget*> list = parentWidget->findChildren<QWidget*>() ;
foreach( QWidget* w, list ) {
   w->setEnabled( false ) ;
}
于 2015-04-17T19:49:00.893 回答
-2

如果您使用 Qt Widgets Application 模板并且 Advanced 选项卡的名称是tabAdvanced(您可以在 Object Inspector 中检查名称),这应该可以工作:

ui->tabAdvanced->setEnabled(false);
于 2018-03-30T08:35:11.743 回答
-3

您可以禁用选项卡的布局。

bool result = false;
if (result == false)
{
  tabWidget->widget(1)->layout()->setDisabled(true);
}
于 2015-04-17T20:24:12.947 回答