【问题标题】:Show/Hide sub-tab on QTabWidget在 QTabWidget 上显示/隐藏子选项卡
【发布时间】:2013-08-26 00:36:48
【问题描述】:

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

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

但这对我不起作用。你有什么解决办法吗?

谢谢!

【问题讨论】:

    标签: c++ qt qtabwidget


    【解决方案1】:

    您只能选择使用:

    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));
                    ....
                }
            }
        }
    };
    

    【讨论】:

    • 如果您在 Qt Creator 的 UI 设计器中有选项卡,则不需要这种复杂性。只需使用removeTab 及更高版本,将其添加回来,只需使用findChild 函数拉出选项卡(它仍然存在,由 UI 对象管理,即使从选项卡小部件中删除后也是如此)。请在此处查看 2011 年 8 月 12 日的评论:qtcentre.org/threads/…(它适用于我,6 年后)。
    • @Dan Nissenbaum 是的,这是编码风格的问题。您会看到很多关于存储指向各种 gui 控件的指针的代码,但我也开始更多地使用 findChild。 C++11 提供的 lambda 回调也减少了存储指针的需要。
    • @DanNissenbaum :您应该将您的回复作为答案。无论如何,谢谢。
    • Qt 5.15 引入了一个 setTabVisible 方法,见:doc.qt.io/qt-5/qtabwidget.html#setTabVisible
    【解决方案2】:

    为了隐藏我使用了:

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

    为了表明我相信您可以使用 insertTab() 将其插入到相同的位置/索引。

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

    【讨论】:

      猜你喜欢
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多