Qt 意外と使えるQTabBar
QTabWidgetのタブの部分だけのウィジェットとしてQTabBarというクラスがあります
このQTabBarは意外と実用的なクラスですがQt Designerで追加できるウィジェットには含まれていません。
そのため知名度は低いように思ったので紹介してみようと思います。
このウィジェットもQWidgetを継承しているクラスのため、その他のウィジェットと同じように他のウィジェット上に配置することができます。
とりあえずウィジェットの真ん中に配置すると見た目はこのような感じになります。
タブの操作はQTabWidgetと同じように、
追加はaddTab関数やinsertTab関数で末尾に追加や途中への追加、
削除はremoveTabでインデックスを指定して削除、
というように操作可能です。
もちろんcurrentChangedシグナルも実装されているためカレントタブが変更されたことも通知してくれます。
またsetTabButtonという関数では、例えば"閉じるボタン"などのボタンをタブ上に追加が可能です。
ボタンの配置はLeftSideとRightSideを選ぶことができます。
ですが実はこの関数、TabButtonという関数名ですが引数で受けつけるのはQWidgetのポインタなので、
QWidgetを継承したウィジェットならばどんなウィジェットでも配置可能なのです。
下は使いどころがあるかは不明ですが、タブにQComboBoxとQCheckBoxを追加したサンプルです。
このように利用用途がありそうなQTabBarですが、やはりQt Designerでformを作成している場合、Qt Designer上のフォームエディタでQTabBarも配置したいと考えるかと思います。
その場合、以下の方法で若干無理やりではありますがフォームエディタ上でQTabBarも配置できました。
下のようなフォームでButton1とButton2の間に配置したいとします。
そこにQWidgetをリストからドラッグして追加します。
追加したQWidgetを右クリックして"格上げ先を指定"を選択します。
ここで立ち上がったダイアログで
ベースクラス名: QWidget
格上げされたクラス名: QTabBar
ヘッダファイル: QTabBar
と入力し、"追加"、"格上げ"ボタンを順に押します。
ソースの方でタブをいくつか追加してみて実行します。
これでフォームエディタからQTabBarを配置できました。
もし上記の方法で駄目だった場合、例えば下のようなQTabBarを継承しただけのカスタムクラスを作成し、そのクラスへウィジェットの格上げを行うことで
同じようにフォームエディタでの配置が可能だと思います。
mytabbar.h
#ifndef _MYTABBAR_H_ #define _MYTABBAR_H_ #include <QTabBar> class MyTabBar : public QTabBar { public: explicit CustomTabBar( QWidget *parent = 0 ) : QTabBar( parent ) {} }; #endif // _MYTABBAR_H_