QTabWidget如何只隐藏窗格?

时间:2013-09-27 10:02:47

标签: qt qt4 qtabwidget

我在QToolButton中添加了QTabWidget作为角落小部件,可以检查。我想在取消选中工具按钮时隐藏所有选项卡(仅限窗格)。我尝试将按钮的信号clicked(bool)与所有标签的setVisible(bool)广告连接无法连接。我还将tabwidget的setvisible连接到信号,但完整的小部件变得不可见(这是一个愚蠢的试验)。有没有办法让只有窗格不可见,标签栏不会消失?


编辑:代码(ui有一个tabwidget和两个标签,即tab和tab_2)

ui->setupUi(this);
QToolButton * b = new QToolButton;
b->setCheckable(true);
b->setChecked(true);
b->setAutoRaise(true);
b->setText("Hide Tabs");
ui->tabWidget->setCornerWidget(b);
connect(b,SIGNAL(clicked()),ui->tab,SLOT(hide()));
connect(b,SIGNAL(clicked()),ui->tab_2,SLOT(hide()));

5 个答案:

答案 0 :(得分:3)

使用qFindChild查找QTabBar中的QTabWidget

QTabBar *tabBar = qFindChild<QTabBar *>(ui->tabWidget);
tabBar->hide();

对于Qt5:

QTabBar *tabBar = ui->tabWidget->findChild<QTabBar *>();
tabBar->hide();

答案 1 :(得分:2)

所以我理解为这样,你想要隐藏TabBar并让标签可见。或者至少是我从你的问题得到的东西

如果是这样的话你只需要这样做:

connect(ui->pushButton,SIGNAL(clicked()),ui->tabWidget->tabBar(),SLOT(hide()));

我希望这很有帮助,即使问题有点陈旧,我可能会对新观众有所帮助。

答案 2 :(得分:1)

这是我对此的看法。我创建了一个继承QTabWidget的类。我做的是;将“QTabWidget的最大垂直尺寸”设置为INSERT INTO EMPLOYEES ( EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID ) VALUES ( :v0, :v1, :v2, :v3, :v4, :v5, :v6, :v7, :v8, :v9, :v10 ); 的高度以隐藏面板。

这是一个hacky解决方案,我不得不添加一些额外的线来处理怪癖。

file:hidabletabwidget.h

tabBar

file:hidablewidget.cpp

#ifndef HIDABLETABWIDGET_H
#define HIDABLETABWIDGET_H

#include <QTabWidget>
#include <QAction>

class HidableTabWidget : public QTabWidget
{
    Q_OBJECT
public:
    explicit HidableTabWidget(QWidget *parent = 0);
    QAction hideAction;

private slots:
    void onHideAction(bool checked);
    void onTabBarClicked();
};

#endif // HIDABLETABWIDGET_H

要使用此功能,您只需使用qt designer将QTabWidget“提升”为“HidableTabWidget”。

以下是我的系统的外观:

hidable widget shown and hidden states screenshot

答案 3 :(得分:0)

您通常希望从QTabWidget

中删除标签
void QTabWidget::removeTab ( int index )

删除的标签不会被删除,可以重新插入! 因此,您可以将QToolButton b连接到一个只删除Tabs的插槽:

connect( b, SIGNAL(clicked()), this, SLOT(hideTabs() );
..
void Foobar::hideTabs( void )
{
   for( int i = 0; i < ui->tabWidget->count(); ++i )
      ui->tabWidget->removeTab(i);
}

答案 4 :(得分:0)

由于我的声誉很低,我无法发表评论。至今。如果我可以,我只需在Anatoli的答案中添加评论:目标是隐藏&#34;页面区域&#34;,而不是&#34;标签栏&#34;。因此,如果我们暗示他们总是使用QStackedWidget那么答案应该更像是:

auto * tab_pane = qFindChild<QStackedWidget *>(ui->tabWidget);
tab_pane->hide();

或Qt5:

auto * tab_pane = ui->tabWidget->findChild<QStackedWidget *>();
tab_pane->hide();