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()));