Qtの:スタイリングQTabWidget
-
21-09-2019 - |
質問
私はQtのを使用していると私はQtのデザイナエディタでQTabWidgetのセットアップを持っている、あなたは写真1にそれを見ることができます。
あなたは空きが右端までのすべての方法があるTAB4後に見ることができるように画像2に(最高のものがセットAのことができるようにすることであろうように、何らかの方法で私は、色でそのスペースを埋めるために必要があります)色を退色。それとも別の解決策は、タブが画面全体をカバーするために出て浮いていることになります。
私は今、次のスタイルシートを使用します:
QTabWidget::tab-bar {
}
QTabBar::tab {
background: gray;
color: white;
padding: 10px;
}
QTabBar::tab:selected {
background: lightgray;
}
Qtのスタイルシートを使用してQTabBarの背景色を設定する方法はありますか?または私はタブがQtのスタイルシートを使用して、エッジに出浮動入手できますか?
編集: cjhuittは、以下の提案 - 私はカレブHuittがそのソリューションをしようとしています。私は実際にタブが拡大することが、それは働いて得ることができないという考えのような。
私のQTabWidget上でのQt DesignerのエディタI右クリック - >「への推進...」と「基本クラス名」を選択します。QTabWidgetを 「推進クラス名」:ExpandableTabWidget その後、私は追加をクリックし、推進します。
私QTabWidget Iセットを保持しているウィジェットのinitメソッドで
ui.tabWidget->SetTabsExpanding(true);
すべては罰金を構築しているが、QTabbarが展開されません。
アム私は何かを間違っているの?
ありがとうございます。
解決
拡張タブと背景の着色の両方は、スタイルシートを使用して達成することができる。
は、タブを展開するため、スタイルシートは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();
}
他のヒント
私はそれを見ると、あなたが何をしたいかに応じて、2つのオプションがあります。
の色で背景を埋めるために:の
タブウィジェットのその部分の透明性を活用してくださいます。
QWidget *bg = new QWidget( parent );
bg->setAutoFillBackground( true );
QPalette bg_palette = bg->palette();
bg_palette.setColor( QPalette::Window, QColor( "orange" ) );
bg->setPalette( bg_palette );
QHBoxLayout layout = new QHBoxLayout();
layout->setMargin( 0, 0, 0, 0 );
layout->setSpacing( 0 );
bg->setLayout( layout );
QTabWidget *tab_widget = new QTabWidget();
// set up tab_widget however you want...
layout->addWidget( tab_widget );
これは、すべてのオレンジ色のウィジェットBGになりますが、BGウィジェットを上に描画されますウィジェットタブのほとんどは、あなただけ描画されないウィジェットタブオレンジ色が表示されます。
のタブが展開するようにするには:の
私は、これはそれがより容易になるだろうと思っていますが、基本的にはそれが使用するウィジェットタブバーへのアクセスを得るためにQTabWidgetをサブクラス化する必要があります。
class ExpandableTabWidget : public QTabWidget
{
Q_OBJECT;
Q_PROPERTY( bool expanding_tabs READ Expanding WRITE SetExpanding );
public:
ExpandableTabWidget( QWidget *parent = NULL ) : QTabWidget( parent )
{
}
bool Expanding() const
{
return tabBar()->expanding();
}
void SetTabsExpanding( bool expanding = true )
{
tabBar()->setExpanding( expanding );
}
};
はその後、いずれかのプラグインにあなたのExpandableTabWidget
クラスを作成し、デザイナーにそれを使用する必要があるだろうか、型ExpandableTabWidget
であることと、コード内の拡大値を設定するために、あなたのタブウィジェットを促進することができました。あなたがプロモーションを行うことを選択した場合、あなたはデザイナーに必要な結果は表示されませんが、あなたは、あなたのプログラムを実行する時期ます。
4.5 QTに新しいプロパティそのコントロールは、のdocumentModeのと呼ばれ、レンダリングウィジェットのタブがあります。ただ、コールtabWidget->setDocumentMode(true)
およびスタイルシートを使用してQTabBarの背景色を設定します。
Qtのドキュメントから:
このプロパティは、タブのウィジェットは、ドキュメントページに適したモードでレンダリングされているかどうかを保持しています。これは、Mac OS X上のドキュメントモードと同じです。
このプロパティが設定されている場合、タブウィジェットフレームがレンダリングされていません。このモードは、ほとんどのタブウィジェットエリアのページカバードキュメントタイプのページを表示するのに便利です。
私はいくつかの時間前に同じ問題を抱えていました。私は「大きな」トップの境界線を作り、そして余裕でタブバーを移動することによってそれを達成