QTabWidget角QToolButton小部件正在消失

QTabWidget corner QToolButton widget disappearing

本文关键字:消失 小部 QToolButton QTabWidget      更新时间:2023-10-16

我有一个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);
}

我已经解决了这个问题。您需要固定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)