La mejor manera para añadir un botón a algunas pestañas y no en otro es definir una subclase de QTabWidget por tomarse el QTabBar que es un potected! El código siguiente se ha probado y funciona:
//TabWidget.h
#ifndef TABWIDGET_H
#define TABWIDGET_H
#include <QTabWidget>
class TabWidget : public QTabWidget {
public:
TabWidget(QWidget *parent);
~TabWidget();
QTabBar *tabBar() const;
};
#endif /* TABWIDGET_H */
//TabWidget.cpp
#include "TabWidget.h"
TabWidget::TabWidget(QWidget * p=0) : QTabWidget(p) {}
TabWidget::~TabWidget() {}
QTabBar * TabWidget::tabBar() const {return QTabWidget::tabBar();}
Para poder utilizar esta subclase y crear una nueva pestaña con un botón personalizado que tiene que siguiendo estas instrucciones (ui-> TabWidget es una QTabWidget con setClosableTabs = false):
TabWidget *t = (TabWidget *) ui->tabWidget;
t->addTab(new QWidget, "empty");
QTabBar *tab = t->tabBar();
QPushButton *b = new QPushButton();
b->setText("x");
tab->setTabButton(tab->count() -1, QTabBar::RightSide, b);
connect(b,SIGNAL(...),this,SLOT(...));
no, no servirá de nada, porque cuando se recibe la señal, el evento ya se va a realizar y la señal no puede hacer nada. –
Agregué el espacio tabCloseRequest en mi respuesta para aclarar cómo se puede usar. – thelinuxer