如何禁用 QTabWidget 中的一个选项卡?

Posted

技术标签:

【中文标题】如何禁用 QTabWidget 中的一个选项卡?【英文标题】:How do I disable one tab in a QTabWidget? 【发布时间】:2015-04-17 19:35:11 【问题描述】:

我有一个名为 tabWidget 的 QTabWidget。它具有三个选项卡:“基本”、“高级”和“当前结构”。选项卡按该顺序显示在小部件中。

每当布尔值result 为假时,我想禁用“高级”选项卡。我认为它会像这段代码一样简单:

bool result = false;
if (result == false)

  tabWidget->widget(1)->setDisabled(true);

不幸的是,这段代码并没有禁用选项卡,即使我检查它也保持启用状态:

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

为什么标签没有被禁用?还有另一种方法吗?

我使用的是 Qt 5.4.0。

【问题讨论】:

【参考方案1】:

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

根据您的代码 sn-p,它看起来像这样:

bool result = false;
if (result == false)

  tabWidget->setTabEnabled(1, false);

【讨论】:

或者更简洁:tabWidget->setTabEnabled(1, result);【参考方案2】:

你不能,不能这样。

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

类似这样的:

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

【讨论】:

这是我需要的。它可以防止更改选项卡内容,但保留选项卡的可见性。【参考方案3】:

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

ui->tabAdvanced->setEnabled(false);

【讨论】:

什么是tabAdvanced 应该是Advanced tab QWidget的名字,是tabWidget的child,可以在Object Inspector中查看名字 提问者只想禁用 QTabBar 选项卡,而不是 QTabWidget,因此您的代码不会响应 OP。 这不是 QTabWidget,而是 QWidget。提问者接受了 Daniel Hedberg 的回答,这似乎禁用了 tabWidget 的页面,我的代码执行相同但方式不同。 如果您意识到您的问题不起作用,因为您假设了很多事情,这并不普遍,我建议您阅读How to Answer,如果您改进答案,我将删除反对票。【参考方案4】:

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

bool result = false;
if (result == false)

  tabWidget->widget(1)->layout()->setDisabled(true);

【讨论】:

以上是关于如何禁用 QTabWidget 中的一个选项卡?的主要内容,如果未能解决你的问题,请参考以下文章

QTabWidget 访问实际选项卡(不是内容小部件)

如何将 QTabWidget 中的一个选项卡设置为在 Qt 中不可移动?

如何制作没有页面的 QTabWidget

如何访问 QTabWidget 不同选项卡中的小部件?

识别 QT Qtabwidget 中的选项卡

避免 QTabWidget 中的重复选项卡