Re
-
Hi,
Ich habe mir einen eigenen CIM_Style_MenuBar von QStyle abgeleitet, und alle virtuellen Funktionen an QApplication::style()->"Funktion"
delegiert.
Diese QStyle wird einem QRabBar übergeben.
Das QTabBar ist Teil eines QTabWidgets, welches während der Laufzeit in seienr größe verändert werden kann, so dass das resizeEvent ausgelöst wird.
Ich würde gerne meinen Style so machen, dass er die Größe der Tabs verändert, wenn ich resize.
Mit der Folgenden Funktion kann ich die Größe der Tabs von QTabwidgets verändern:QSize CIM_Style_MenuBar::sizeFromContents ( ContentsType type, const QStyleOption * option, const QSize & contentsSize, const QWidget * widget ) const
Diese Funtion wirde jedoch bei einem Resize event nicht aufgerufen, womit ich zwar die Größe einmal bei der initialisierung angeben kann, aber ich kann sie dann nie wieder verändern.
Die Folgenden Funktionen werden bei einen resizeEvent aufgerufen:int CIM_Style_MenuBar::pixelMetric ( PixelMetric metric, const QStyleOption * option, const QWidget * widget ) const void CIM_Style_MenuBar::drawPrimitive ( PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget) const //Bewirkt keine größenveränderung, wenn ich bei dem Rückgabewert mit setSize die größe des QRect verstelle QRect CIM_Style_MenuBar::subElementRect ( SubElement element, const QStyleOption * option, const QWidget * widget ) const void CIM_Style_MenuBar::drawControl ( ControlElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget ) const
Wie kann ich in den aufgerufenen Funktionen die Größe der Tabs bei einem resizeEvent verändern??
Gibt es eine Möglichkeit dass bei einem ResizeEvent automatisch auch die Funktion sizeFromContents(..) aufgerufen wird ???
(Denke selber aufrufen bringt nichts, da die Funktion ja die Größe des Tabs als QRect zurückgiebt, und diese dann wohl per rückgabewert irgendwo speichern wird.Gruß
-
Bitte um Entschuldigung für Überschrift.
-
Zeig uns wie du die Funktionen implementiert hast.
Zur Weihnachtszeit kann ich immer recht schlecht weissagen, da sind die guten Mächte zu stark...
-
Na ja eigentlich ist es vollständig beschrieben.
Aber Du findest Code (Ohne Delegation) in QTabWidget größe verstellen.
Bin auber glaube ich schon weiter.
[cpp]
QApplication::style()->drawPrimitive ( PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0 ) const;
[cpp]
hat in seiner Parameter Liste ein QStyleOption welches als Member ein
revt hat. Ich werde versuchen über ein switch case den fall eines
QTabWidgets ab zu fangen, und dann das revt in der größe an zu passen. Hoffe da funktioniert so
-
Also die letzte genannte Idee haut niht hin
-
Also es funktioniert jetzt doch.
Am Besten geht es wenn man Folgendes macht
1.) Eine Eigene Klasse von QTabWidget ableiten für den Zugriff auf die geschützen Funktionen
2.) Den Pointer auf QTabBar holen
3.) Für QTabbar eine geigene Styleklasse machen und die auch setzen
4.) In der Style Klasse mitvoid CIM_Style_MenuBar::drawControl ( ControlElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget ) const
die Größe verändern.
Schaut aller dings unschön aus, da die Zeichnung lücken bekommt.
Gruß