QVBox oder QGroupBox
-
- Beiträge: 11
- Registriert: 11. August 2004 07:44
- Wohnort: Bergen/Rügen
- Kontaktdaten:
QVBox oder QGroupBox
Mein Problem! ich will wie auf dem Bild zu erkennen ist, dort wo die Pfeile hinzeigen will ich wenn ich mit der rechten Maustaste dort anklick das es gelöscht wird! aber nur dort! und nicht im Großenfeld! Muß ich mir jetzt eine eigene Klasse schreiben oder kann ich bereits vorhandenes Material verwenden!?
hier das Bild!
www.fotos.web.de/timbuktubob
hier das Bild!
www.fotos.web.de/timbuktubob
war Fehler findet darf Sie behalten!
-
- Beiträge: 11
- Registriert: 11. August 2004 07:44
- Wohnort: Bergen/Rügen
- Kontaktdaten:
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:
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
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"))
}
}
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
-
- Beiträge: 11
- Registriert: 11. August 2004 07:44
- Wohnort: Bergen/Rügen
- Kontaktdaten:
also diese Sachen helfen mir nicht wirklich ein!
die methode die du hier drinne beschrieben hast, fängt die schon die ganzen mouseEvents ab oder wie? habe echt keinen schimmer wie ich das hinkriegen kann!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.
war Fehler findet darf Sie behalten!
Hi,
oki ich hab Dir mal was gebastelt.
Ich erstelle also ein QTabDialog, übergebe meine eigene QTabBar, in der ich die MouseEvents abfrage. Wenn die rechte Maustaste geklickt wurde, frag ich ab, welches Tab sich unter diesen Koordinaten befunden hat. Und dieses wird dann entfernt.
Hoffe es hilft.
Gruß
Mike
oki ich hab Dir mal was gebastelt.
Code: Alles auswählen
/****** Datei MySlots.h (Name hat keine Bedeutung) ******/
#include <iostream>
#include <qlineedit.h>
#include <qtabbar.h>
#include <qtabdialog.h>
#include <qvbox.h>
class MyTabBar : public QTabBar {
Q_OBJECT
public:
MyTabBar ( QWidget * parent, const char * name = 0 ) : QTabBar(parent, name) {
}
void mousePressEvent ( QMouseEvent *e ) {
printf("%s wurde geklickt\n", name());
if (e->button() == QWidget::RightButton) {
QTab *selectedTab = selectTab(e->pos());
removeTab(selectedTab);
} else {
QTabBar::mousePressEvent(e);
}
}
};
class MyTabDialog : public QTabDialog {
Q_OBJECT
public:
MyTabDialog( QWidget * parent, const char * name = 0 ) : QTabDialog(parent, name) {
MyTabBar *myTabBar = new MyTabBar(this, "MyTabBar");
setTabBar(myTabBar);
int jahr = 2000;
for (int i=0; i<12; i++) {
QVBox* myBox = new QVBox(this);
addTab( myBox, QString::number(jahr + i) );
}
}
};
/****** Datei MySlots.h Ende ******/
/****** Datei main.cpp ******/
#include <qapplication.h>
#include "MySlots.h"
using namespace std;
int main( int argc, char **argv )
{
QApplication a( argc, argv );
MyTabDialog *myTabDialog = new MyTabDialog(0, "MyWindow");
a.setMainWidget(myTabDialog);
myTabDialog->show();
return a.exec();
}
/****** Datei main.cpp Ende ******/
Ich erstelle also ein QTabDialog, übergebe meine eigene QTabBar, in der ich die MouseEvents abfrage. Wenn die rechte Maustaste geklickt wurde, frag ich ab, welches Tab sich unter diesen Koordinaten befunden hat. Und dieses wird dann entfernt.
Hoffe es hilft.
Gruß
Mike
-
- Beiträge: 70
- Registriert: 11. August 2004 07:44
- Wohnort: Bergen auf Rügen
- Kontaktdaten:
Hi Jaegermeister,
ich muss natürlich auch erst die Dokumentationen von Trolltech durchstöbern und eventuell Beispiele anschauen, wie sowas überhaupt geht, da ich weder QTab noch QTabDialog oder so je benutzt habe. Und dann fang ich anhand der Klassenübersicht und den Beschreibungen an zu basteln. Die obige Lösung hat also schon etwas Zeit in Anspruch genommen (also ca. eine halbe bis eine Stunde Dokus lesen, Beispiele anschauen, Google fragen und dann noch halbe Stunde tippen und rumprobieren).
Um genau zu sein, mach ich eigentlich noch nicht viel Qt. Ich habe vor 1-2 Jahren mal ein bis zwei Wochen damit rumgespielt, hab dann jedoch wieder aufgehört, da ich andere Dinge programmieren musste, die keine GUIs benötigt haben. Nun habe ich vor 2 Wochen wieder angefangen mir das ganze mal anzuschauen, da mich das Toolkit immer wieder interessiert und ich außerdem KDE-User bin. Nur hatte ich bis vor 2 Wochen mit Java zu kämpfen, weshalb ich von C++ die Finger gelassen habe.
Normal programmiere ich fast nie etwas mit GUIs, aber vielleicht braucht man es doch irgendwann mal und dann fände ich ein kleines Qt - oder KDE - Programm schon nett Leider bin ich bisher nicht über ein kleines Beispielprogramm hinausgekommen, um einen Einstieg zu finden und eben die Beispiele hier im Forum. Die Dokus von Trolltech sind jedoch sehr gut und durch das Lesen von Fragen und den passenden Antworten (oder selbst Antworten versuchen zu finden) lernt man immer etwas dazu.
Gruß
Mike
ich muss natürlich auch erst die Dokumentationen von Trolltech durchstöbern und eventuell Beispiele anschauen, wie sowas überhaupt geht, da ich weder QTab noch QTabDialog oder so je benutzt habe. Und dann fang ich anhand der Klassenübersicht und den Beschreibungen an zu basteln. Die obige Lösung hat also schon etwas Zeit in Anspruch genommen (also ca. eine halbe bis eine Stunde Dokus lesen, Beispiele anschauen, Google fragen und dann noch halbe Stunde tippen und rumprobieren).
Um genau zu sein, mach ich eigentlich noch nicht viel Qt. Ich habe vor 1-2 Jahren mal ein bis zwei Wochen damit rumgespielt, hab dann jedoch wieder aufgehört, da ich andere Dinge programmieren musste, die keine GUIs benötigt haben. Nun habe ich vor 2 Wochen wieder angefangen mir das ganze mal anzuschauen, da mich das Toolkit immer wieder interessiert und ich außerdem KDE-User bin. Nur hatte ich bis vor 2 Wochen mit Java zu kämpfen, weshalb ich von C++ die Finger gelassen habe.
Normal programmiere ich fast nie etwas mit GUIs, aber vielleicht braucht man es doch irgendwann mal und dann fände ich ein kleines Qt - oder KDE - Programm schon nett Leider bin ich bisher nicht über ein kleines Beispielprogramm hinausgekommen, um einen Einstieg zu finden und eben die Beispiele hier im Forum. Die Dokus von Trolltech sind jedoch sehr gut und durch das Lesen von Fragen und den passenden Antworten (oder selbst Antworten versuchen zu finden) lernt man immer etwas dazu.
Gruß
Mike