1

QToolButtonチェック可能なas corner ウィジェットを追加しましたQTabWidget。ツール ボタンのチェックを外したときに、すべてのタブ (ペインのみ) を非表示にしたい。ボタンの信号clicked(bool)をすべてのタブのsetVisible(bool)スロットに接続しようとしましたが、機能しませんでした。タブウィジェットもシグナルに接続setvisibleしましたが、完全なウィジェットが見えなくなりました(ばかげた試行でした)。ペインのみを非表示にし、タブ バーが消えないようにする方法はありますか?


編集: コード (ui には、tabwidget と、tab と tab_2 という 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()));
4

5 に答える 5

3

このように理解しているので、TabBarを非表示にしてタブを表示したいとします。または、少なくともそれがあなたの質問から得たものです

その場合、あなたがしなければならないのはこれだけです:

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

これが役に立てば幸いです。少し古い質問でも構いませんが、新しい視聴者には役立つかもしれません。

于 2015-12-16T17:11:58.470 に答える
2

これが私の見解です。QTabWidget を継承するクラスを作成しました。私がしていることは次のとおりです。「QTabWidget の最大垂直サイズ」をそのtabBar高さに設定して、パネルを非表示にします。

これはハックなソリューションであり、癖に対処するためにいくつかの行を追加する必要がありました。

ファイル: hidabletabwidget.h


#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

ファイル: hidablewidget.cpp


#include "hidabletabwidget.h"
#include <QTabBar>
#include <QToolButton>

HidableTabWidget::HidableTabWidget(QWidget *parent) :
    QTabWidget(parent),
    hideAction("▾&quot;, 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);
}

これを使用するには、qt デザイナーを使用して QTabWidget を「HidableTabWidget」に「昇格」するだけです。

そして、これが私のシステムでどのように見えるかです:

非表示可能なウィジェットの表示状態と非表示状態のスクリーンショット

于 2015-07-30T14:21:50.627 に答える
0

通常、QTabWidgetから Tab を削除します。

void QTabWidget::removeTab ( int index )

削除されたタブは削除されず、再挿入できます! 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);
}
于 2013-10-01T07:16:58.393 に答える