Hi,
hab leider auch keine Lösung, aber eine Idee, wie Du es mal versuchen könntest. Kann natürlich sein, dass es eine viel einfachere Methode gibt.
Dafür benötigst Du QTabDialog und QTabBar.
Zunächst erstellst Du eine neue Klasse, abgeleitet von QTabDialog, ich nenne sie mal einfach "MyTabDialog".
Dann erstellst Du eine Klasse, abgeleitet von QTabBar, im folgenden "MyTabBar" genannt.
Jetzt gehst Du folgendermaßen vor:
Im Konstruktor von MyTabDialog legst Du eine eigene QTabBar fest, dafür gibt es die Funktion setTabBar. Das ganze schaut dann in etwa so aus:
Code: Alles auswählen
class MyTabDialog : public QTabDialog {
MyTabDialog(QWidget * parent, const char * name) : QTabDialog(parent, name) {
//Hiermit wird die neue TabBar gesetzt
setTabBar(new MyTabBar(this, "MyTabBar"))
}
}
MyTabBar muss natürlich vorher noch definiert werden. QTabBar gibt Dir die Möglichkeit herauszufinden, an welchem Punkt (Pixel) sich welcher Tab befindet. Du könntest nun folgendes versuchen:
Du fängst vom Fenster die MouseEvents ab. Klickt der User mit der rechten Maustaste wird ein Slot von MyTabBar aufgerufen, welches nun überprüft, welches Tab sich an den Koordinaten der Maus befindet. Dafür gibt es folgende Methode:
virtual QTab * selectTab ( const QPoint & p ) const
Diese gibt Dir einen Pointer auf das Tab zurück, an dem sich die Maus befindet. Falls sich die Maus über keinem Tab befindet, wird 0 zurückgegeben. So hast Du also die Möglichkeit herauszufinden, welches Tab der User mit der rechten Maustaste angeklickt hat.
Nun kannst Du mit der Methode
void QTabBar::removeTab ( QTab * t )
das Tab entfernen.
Ich hab wie gesagt absolut keine Ahnung, ob das funktioniert. Ich könnte mir jedoch vorstellen, dass es von den Ansätzen her funktioniert. Vielleicht hilft es Dir ja weiter.
Gruß
Mike