我在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()));
答案 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”。
以下是我的系统的外观:
答案 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();