まあ、私はあなたが1つだけQTabWidget
とすることはできないと思う。まず、QTabWidget
を使用する必要がありますが、QTabBar
は使用しないでください。
とにかく、答えはQSpacerItem
との2つですQTabBars
です。
- タブで2つの
QTabBars
を作成します。
- 作成
QHBoxLayout
;
- このレイアウトに最初のバーを追加して、ポリシーを拡張して
QSpacerItem
を追加し、最後のバーを追加します。
- どのバーでもクリックすると、ウィジェットを信号/スロットで画面に表示/非表示できます。
問題は - デフォルトでそれぞれ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
}
}
1:ウィジェットの両側に二つのものを入れたときにQSpacerItemを使用することはいつも私のために良い解決策となっています – IAmInPLS