QTabWidget角落QToolButton小部件消失了

Mat*_*ski 4 c++ qt

我有一个QTabWidget,动态添加和删除了标签.我还将QToolButton设置为角落小部件,以便处理其clicked()信号上的添加事件.

虽然添加工作完全正常,从窗口小部件中删除所有选项卡会导致按钮消失.我已经尝试使用样式表来创建一个宽度为0的隐形第一个标签,但这种方法让我失望.可能是因为我setTabsClosable(true)在所有选项卡上都有关闭按钮的空间.

当没有标签时,当QTabBar将其高度折叠为0时,我还认为按钮正在消失.我试过,tabBar()->setMinimumHeight(30);但这种解决方法也没有用.有任何想法吗?

这里我的代码示例再现了问题:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QToolButton"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->tabWidget->setTabsClosable(true);
    ui->tabWidget->tabBar()->setMinimumHeight(30);

    QToolButton *btn = new QToolButton(ui->tabWidget);
    btn->setText("Add new");
    btn->setCursor(Qt::ArrowCursor);
    btn->setAutoRaise(true);
    ui->tabWidget->setCornerWidget(btn, Qt::TopLeftCorner);

    qDebug() << ui->tabWidget->cornerWidget(Qt::TopLeftCorner);  

    connect(ui->tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int)));

}

MainWindow::~MainWindow()
{
    delete ui;
}

//SLOT
void MainWindow::closeTab(int index)
{
    ui->tabWidget->removeTab(index);
    if(ui->tabWidget->count() == 0)
        qDebug() << ui->tabWidget->cornerWidget(Qt::TopLeftCorner);
}
Run Code Online (Sandbox Code Playgroud)

小智 5

我已经解决了这个问题.你需要修复的最小高度为双方QToolButtonQTabBar.

到目前为止,我已经在python中使用了这段代码:

def initialise()
    # Initialise your Tab Widget however you need
    self.tabCloseRequested.connect(self.removeTab)

def removeTab(self,index):
    h = self.cornerWidget().height()

    self.removeTab(index)
    self.update()
    if self.count() == 0:
        self.cornerWidget().setMinimumHeight(h)
        self.setMinimumHeight(h)
Run Code Online (Sandbox Code Playgroud)