【问题标题】:How do I disable one tab in a QTabWidget?如何禁用 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。

【问题讨论】:

    标签: qt qt4 qt5 qtabwidget qtabbar


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2018-05-30
      • 1970-01-01
      相关资源
      最近更新 更多