Il modo migliore per l'aggiunta di un pulsante per alcune schede e non in altri è quello di definire una sottoclasse di QTabWidget per prendere il QTabBar che è un potected! Il codice di seguito viene testato e funziona:
//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();}
Per utilizzare questa sottoclasse e creare una nuova scheda con un pulsante personalizzato è necessario seguendo queste istruzioni (UI-> TabWidget è un 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, non sarà d'aiuto, perché quando il segnale ricevuto, l'evento è già in corso e il segnale non può fare nulla. –
Ho aggiunto lo spazio tabCloseRequest nella mia risposta per chiarire come può essere utilizzato. – thelinuxer