在QTabWidget上显示/隐藏子选项卡

11

假设我有一个包含5个子选项卡的QTabWidget。现在我想要通过以下代码来显示/隐藏其中的一个子选项卡。

ui->twListTabs->widget(0)->hide();           // Hide first sub-tab

但是这对我没有用。你有任何解决方案吗?

谢谢!

2个回答

13

你只能选择使用:

void QTabWidget::removeTab(int index)

您需要将 QWidget 的指针存储在选项卡中,以便稍后将其插入。

例如,您可以执行以下操作:

class TabWidget : public QTabWidget
{
    Q_OBJECT          
    enum tabwidgets {tabwidget1,tabwidget2,...,number_of_tabwidgets};
    QWidget* widgets_[number_of_tabwidgets];
public:
    TabWidget(QWidget* parent = 0) : QWidget(parent)
    {
        for(int i(0); i < number_of_tabwidgets; ++i)
        {
            switch(i)
            {
            case tabwidget1:
                insertTab(i,widgets_[i] = new TabWidget1,QString::number(i));
                ....
            }
        }
    }
};

6
如果您在Qt Creator的UI Designer中有该选项卡,则无需使用这种复杂方式。只需使用removeTab,稍后再使用findChild函数将选项卡添加回去(即使从选项卡窗口小部件中删除后,它仍由UI对象管理)。请参见此处日期为2011年8月12日的评论:http://www.qtcentre.org/threads/16505-Hiding-a-tab-in-QTabBar-widget?p=200059#post200059(对我来说也有效,6年后)。 - Dan Nissenbaum
@Dan Nissenbaum 是的,这是一个编码风格的问题。你会看到很多代码存储各种 GUI 控件的指针,但我也开始更多地使用 findChild。此外,从 C++11 开始可用的 lambda 回调减少了存储指针的需求。 - user2672165
1
@DanNissenbaum:你应该将你的回复放在回答中。不管怎样,谢谢。 - McLan
7
Qt 5.15引入了一种名为setTabVisible的方法,详见链接:https://doc.qt.io/qt-5/qtabwidget.html#setTabVisible - Reinder

1

我使用了以下代码来隐藏:

ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabToBeRemoved));

我相信你可以使用insertTab()将其插入到相同的位置/索引。

在Qt 5.15+中,您可以使用setTabVisible()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接