2016-05-13 10 views
1

QtTabWidgetから2つのタブを右に移動し、残りを左に移動する方法を理解しようとしています。2つのQtタブを右に移動し、残りを左に残す

タブは静的で、実行時には追加されません。ここで

は私が持っているものである:ここでは Here is what I have so far

は、私が持っているしたいものです。 Here is what I want to have

私はスタイルシートを編集しようとした追加alignment:right;ではなく、単にそれらのすべてが右行かせることにしました特定のタブでは機能しません。私はまた、floatposition:absolute;right:0;のようなものを試しましたが、運はありません。

qt docsの中に私がここで助けてくれるものが見つかりませんでした。

私の質問は:「プロフィール」タブと「設定」タブを右に移動し、残りの部分をそのまま残すにはどうすればよいですか?

答えて

5

まあ、私はあなたが1つだけQTabWidgetとすることはできないと思う。まず、QTabWidgetを使用する必要がありますが、QTabBarは使用しないでください。

とにかく、答えはQSpacerItemの2つですQTabBarsです。

  1. タブで2つのQTabBarsを作成します。
  2. 作成QHBoxLayout;
  3. このレイアウトに最初のバーを追加して、ポリシーを拡張してQSpacerItemを追加し、最後のバーを追加します。
  4. どのバーでもクリックすると、ウィジェットを信号/スロットで画面に表示/非表示できます。

問題は - デフォルトでそれぞれQTabBarの最初のバーが選択されています。各QTabBarに空のタブを追加することで解決します。

いくつかのコード例:ここでは

_firstBar = new QTabBar(this); 
_firstBar->addTab(""); 
_firstBar->addTab("First tab"); 
_firstBar->addTab("Second tab"); 
_firstBar->addTab("Third tab"); 
_firstBar->addTab("Fourth tab"); 
_firstBar->setDrawBase(false); 
_firstBar->setStyleSheet("QTabBar::tab:first { max-width: 0px; border: 0px }"); 

_secondBar = new QTabBar(this); 
_secondBar->addTab(""); 
_secondBar->addTab("Fifth bar"); 
_secondBar->addTab("Sixth bar"); 
_secondBar->setDrawBase(false); 
_secondBar->setStyleSheet("QTabBar::tab:first { max-width: 0px; border: 0px }"); 

QHBoxLayout *lay = new QHBoxLayout(ui->centralWidget); 
lay->addWidget(_firstBar); 
lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed)); 
lay->addWidget(_secondBar); 

connect(_firstBar, &QTabBar::currentChanged, this, &MainWindow::showFirstBarWidget); 
connect(_secondBar, &QTabBar::currentChanged, this, &MainWindow::showSecondBarWidget); 

_firstBar->setCurrentIndex(1); 

スロット:

void MainWindow::showFirstBarWidget(int index) 
{ 
    if(index == 0) 
     return; 

    _secondBar->setCurrentIndex(0); 

    switch(index) { 
     // Here code show/hide your QWidget by index 
    } 
} 

void MainWindow::showSecondBarWidget(int index) 
{ 
    if(index == 0) 
     return; 

    _firstBar->setCurrentIndex(0); 

    switch(index) { 
     // Here code show/hide your QWidget by index 
    } 
} 
+0

1:ウィジェットの両側に二つのものを入れたときにQSpacerItemを使用することはいつも私のために良い解決策となっています – IAmInPLS

関連する問題