タブの展開と背景の色付けは、どちらもスタイル シートを使用して行うことができます。
タブを展開する場合、スタイル シートをタブに適用して、タブの幅を の全幅の一部に設定できますQTabWidget
。サイズ変更時にスタイル シートを更新する必要があるため、イベント フィルターを使用して適用されます。以下の最初のコード例を参照してください。
タブ バーの背景は設定できますが、タブ バーはタブ ペインの上のスペース全体を埋めるわけではありません。透けて見えるのはコンテナ(または親ウィジェット)です。その領域の色を制御するには、 を に入れ、QTabWidget
スタイルQWidget
シートをコンテナーに設定します。以下の 2 番目のコード例を参照してください。
タブの展開:
#include <QtGui>
// Sets the style sheet of the QTabWidget to expand the tabs.
static void expandingTabsStyleSheet(QTabWidget *tw)
{
tw->setStyleSheet(QString("QTabBar::tab { width: %1px; } ")
.arg(tw->size().width()/tw->count()));
}
// On resize events, reapply the expanding tabs style sheet
class ResizeFilter : public QObject
{
QTabWidget *target;
public:
ResizeFilter(QTabWidget *target) : QObject(target), target(target) {}
bool eventFilter(QObject *object, QEvent *event)
{
if (event->type() == QEvent::Resize)
expandingTabsStyleSheet(target);
return false;
}
};
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
QTabWidget *tw = new QTabWidget;
tw->installEventFilter(new ResizeFilter(tw));
tw->addTab(new QWidget, "Tab1");
tw->addTab(new QWidget, "Tab2");
tw->addTab(new QWidget, "Tab3");
tw->show();
return app.exec();
}
タブの横の背景:
#include <QtGui>
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
QWidget *container = new QWidget;
container->setStyleSheet("background: qlineargradient( x1: 0, y1: 0, x2: 1, y2
: 0, stop: 0 black, stop: 1 blue);");
QHBoxLayout *layout = new QHBoxLayout(container);
layout->setContentsMargins(0, 0, 0, 0);
QTabWidget *tw = new QTabWidget(container);
layout->addWidget(tw);
tw->setStyleSheet(
"QTabBar::tab { background: gray; color: white; padding: 10px; } "
"QTabBar::tab:selected { background: lightgray; } "
"QTabWidget::pane { border: 0; } "
"QWidget { background: lightgray; } ");
tw->addTab(new QWidget, "Tab1");
tw->addTab(new QWidget, "Tab2");
tw->addTab(new QWidget, "Tab3");
container->show();
return app.exec();
}