QTabWidget如何仅隐藏窗格?

QTabWidget如何仅隐藏窗格?,qt,qt4,qtabwidget,Qt,Qt4,Qtabwidget,我在QTabWidget中添加了一个QToolButton作为角落小部件,它是可检查的。我想在取消选中工具按钮时隐藏所有选项卡(仅窗格)。我试图将按钮的信号点击(bool)与所有选项卡的setVisible(bool)插槽连接起来,但该插槽不工作。我还将tabwidget的setvisible连接到信号,但整个小部件变得不可见(这是一个愚蠢的尝试)。有没有办法使只有窗格不可见,并且选项卡栏不会消失 编辑:代码(ui有一个tabwidget和两个选项卡,即tab和tab_2) 您通常希望从中删除

我在
QTabWidget
中添加了一个
QToolButton
作为角落小部件,它是可检查的。我想在取消选中工具按钮时隐藏所有选项卡(仅窗格)。我试图将按钮的信号
点击(bool)
与所有选项卡的
setVisible(bool)
插槽连接起来,但该插槽不工作。我还将tabwidget的
setvisible
连接到信号,但整个小部件变得不可见(这是一个愚蠢的尝试)。有没有办法使只有窗格不可见,并且选项卡栏不会消失


编辑:代码(ui有一个tabwidget和两个选项卡,即tab和tab_2)


您通常希望从中删除选项卡:

删除的选项卡不会被删除,可以重新插入! 因此,您可以将
QToolButton b
连接到一个插槽,该插槽只需删除如下选项卡:

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

您通常希望从中删除选项卡:

删除的选项卡不会被删除,可以重新插入! 因此,您可以将
QToolButton b
连接到一个插槽,该插槽只需删除如下选项卡:

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

使用
qFindChild
QTabWidget
中查找
QTabBar

QTabBar *tabBar = qFindChild<QTabBar *>(ui->tabWidget);
tabBar->hide();
QTabBar*tabBar=qFindChild(ui->tabWidget);
tabBar->hide();
对于Qt5:

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

使用
qFindChild
QTabWidget
中查找
QTabBar

QTabBar *tabBar = qFindChild<QTabBar *>(ui->tabWidget);
tabBar->hide();
QTabBar*tabBar=qFindChild(ui->tabWidget);
tabBar->hide();
对于Qt5:

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

以下是我的看法。我创建了一个继承QTabWidget的类。我要做的是:将“QTabWidget的最大垂直大小”设置为其
选项卡的高度以隐藏面板

这是一个骇客的解决方案,我不得不添加一些额外的行处理怪癖

文件:hidabletabwidget.h


\ifndef hidabletab窗口小部件
#定义HIDABLETABWIDGET_H
#包括
#包括
类HidableTabWidget:公共QTabWidget
{
Q_对象
公众:
显式HidableTabWidget(QWidget*parent=0);
动作隐匿;
专用插槽:
无效隐藏(bool检查);
void onTabBarClicked();
};
#endif//HIDABLETABWIDGET\u H
文件:hidablewidget.cpp


#包括“hidabletabwidget.h”
#包括
#包括
HidableTabWidget::HidableTabWidget(QWidget*父项):
QTabWidget(父级),
隐藏(”▾", 本)
{
hideAction.setCheckable(真);
设置工具提示(“隐藏面板”);
QToolButton*hideButton=newqtoolbutton();
hideButton->setDefaultAction(&hideAction);
hideButton->setAutoRaise(真);
此->设置角落小部件(隐藏按钮);
连接(&hideAction),信号(切换(bool)),此,插槽(onHideAction(bool));
连接(这个,信号(tabBarClicked(int)),这个,插槽(onTabBarClicked());
}
void HidableTabWidget::onHideAction(bool已选中)
{
如果(选中)
{
this->setMaximumHeight(this->tabBar()->height());
此->设置策略(QSizePolicy::Expansing,QSizePolicy::Minimum);
}
其他的
{
this->setMaximumHeight(QWIDGETSIZE_MAX);//默认情况下,小部件可以扩展到此宏定义的最大大小
这->设置策略(QSizePolicy::expansing,QSizePolicy::expansing);
}
}
void HidableTabWidget::onTabBarClicked()
{
hideAction.setChecked(false);
}
要使用它,您只需使用qt设计器将QTabWidget“升级”为“HidableTabWidget”

下面是它在我的系统上的外观:


以下是我的看法。我创建了一个继承QTabWidget的类。我要做的是:将“QTabWidget的最大垂直大小”设置为其
选项卡的高度以隐藏面板

这是一个骇客的解决方案,我不得不添加一些额外的行处理怪癖

文件:hidabletabwidget.h


\ifndef hidabletab窗口小部件
#定义HIDABLETABWIDGET_H
#包括
#包括
类HidableTabWidget:公共QTabWidget
{
Q_对象
公众:
显式HidableTabWidget(QWidget*parent=0);
动作隐匿;
专用插槽:
无效隐藏(bool检查);
void onTabBarClicked();
};
#endif//HIDABLETABWIDGET\u H
文件:hidablewidget.cpp


#包括“hidabletabwidget.h”
#包括
#包括
HidableTabWidget::HidableTabWidget(QWidget*父项):
QTabWidget(父级),
隐藏(”▾“,这个)
{
hideAction.setCheckable(真);
设置工具提示(“隐藏面板”);
QToolButton*hideButton=newqtoolbutton();
hideButton->setDefaultAction(&hideAction);
hideButton->setAutoRaise(真);
此->设置角落小部件(隐藏按钮);
连接(&hideAction),信号(切换(bool)),此,插槽(onHideAction(bool));
连接(这个,信号(tabBarClicked(int)),这个,插槽(onTabBarClicked());
}
void HidableTabWidget::onHideAction(bool已选中)
{
如果(选中)
{
this->setMaximumHeight(this->tabBar()->height());
此->设置策略(QSizePolicy::Expansing,QSizePolicy::Minimum);
}
其他的
{
this->setMaximumHeight(QWIDGETSIZE_MAX);//默认情况下,小部件可以扩展到此宏定义的最大大小
这->设置策略(QSizePolicy::expansing,QSizePolicy::expansing);
}
}
void HidableTabWidget::onTabBarClicked()
{
hideAction.setChecked(false);
}
要使用它,您只需使用qt设计器将QTabWidget“升级”为“HidableTabWidget”

下面是它在我的系统上的外观:


由于我的“声誉”很低,我无法发表评论。如果可以,我只需在
#include "hidabletabwidget.h"
#include <QTabBar>
#include <QToolButton>

HidableTabWidget::HidableTabWidget(QWidget *parent) :
    QTabWidget(parent),
    hideAction("▾", this)
{
    hideAction.setCheckable(true);
    hideAction.setToolTip("Hide Panels");
    QToolButton* hideButton = new QToolButton();
    hideButton->setDefaultAction(&hideAction);
    hideButton->setAutoRaise(true);
    this->setCornerWidget(hideButton);

    connect(&hideAction, SIGNAL(toggled(bool)), this, SLOT(onHideAction(bool)));
    connect(this, SIGNAL(tabBarClicked(int)), this, SLOT(onTabBarClicked()));
}

void HidableTabWidget::onHideAction(bool checked)
{
    if (checked)
    {
        this->setMaximumHeight(this->tabBar()->height());
        this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
    }
    else
    {
        this->setMaximumHeight(QWIDGETSIZE_MAX); // by default widgets can expand to a maximum sized defined by this macro
        this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    }
}

void HidableTabWidget::onTabBarClicked()
{
    hideAction.setChecked(false);
}
auto * tab_pane = qFindChild<QStackedWidget *>(ui->tabWidget);
tab_pane->hide();
auto * tab_pane = ui->tabWidget->findChild<QStackedWidget *>();
tab_pane->hide();
connect(ui->pushButton,SIGNAL(clicked()),ui->tabWidget->tabBar(),SLOT(hide()));