QTabWidget Größe der Tabs verstellen
-
Das wird dir auch nicht helfen. Die Tab-Größe errechnet der Style.
Du kannst dir einen Proxy-STyle schreiben, der nur die TabBar und die Tab-Buttons zeichnet. Dann hast du Zugriff auf deine Button-Größe.
-
Verdammt,
Habe es so versucht wie eben beschrieben. Aber bin wie Du gesagt hast nicht weiter gekommen. Weiß jetzt wenigstens warum.
Ist es schwer einen Proxy-Style zu schreiben wenn man davon noch nie etwas gehört hat ??
Und wo finde ich die wichtigsten Infos dazu ??
Gruß
-
Hatte gehofft mit setbaseSize von QTabBar was machen zu können
haut aber nicht hin
-
Ein ProxyStyle ist nicht wirklich schwer.
Du leitest von Q(Common)Style ab und implementierst auf einfache Art sämtlichen virtuellen Funktionen, in der Gestalt, dass du nur
QApplication::style()->virtuelleFunktion(Parameter);
ausführst. VirtuelleFuntkion() und Parameter natüclich dem entsprechende Fall anpassen.
Nur die Elemente die du selber stylen willst, fängst du ab und malst sie nach deinen Wünschen. Wie das geht entnimmst du den zahlreichen Styles die existieren. Qt liefert einige selber mit, andere (allen voran bespin und QtCurve) gibts auf kde-look.org. Spicken erlaubt und erwünschtQWidget kennt nun auch eine Methode setStyle(). Du brauchst jetzt also nur für dein TabWidget deinen eigenen Style setzen, und alles sollte passen. :p
-
:xmas1:
Danek schön. Werd mal mein Glück versuchen.
Gruß
-
*lach* Jetzt sind sie klein, aber leider zu klein. Habe Folgendes gemacht,
was zwar kkopiliert, aber eben nichts tut.#ifndef CIM_Style_H #define CIM_Style_H #include <QStyle> class CIM_Style:public QStyle { public: CIM_Style(); ~CIM_Style(); void drawComplexControl ( ComplexControl control, const QStyleOptionComplex * option, QPainter * painter, const QWidget * widget = 0 ) const; void drawControl ( ControlElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0 ) const; void drawItemPixmap ( QPainter * painter, const QRect & rectangle, int alignment, const QPixmap & pixmap ) const; void drawItemText ( QPainter * painter, const QRect & rectangle, int alignment, const QPalette & palette, bool enabled, const QString & text, QPalette::ColorRole textRole = QPalette::NoRole ) const; void drawPrimitive ( PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0 ) const; QPixmap generatedIconPixmap ( QIcon::Mode iconMode, const QPixmap & pixmap, const QStyleOption * option ) const; SubControl hitTestComplexControl ( ComplexControl control, const QStyleOptionComplex * option, const QPoint & position, const QWidget * widget = 0 ) const; int pixelMetric ( PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0 ) const; QSize sizeFromContents ( ContentsType type, const QStyleOption * option, const QSize & contentsSize, const QWidget * widget = 0 ) const; int styleHint ( StyleHint hint, const QStyleOption * option = 0, const QWidget * widget = 0, QStyleHintReturn * returnData = 0 ) const; QRect subControlRect ( ComplexControl control, const QStyleOptionComplex * option, SubControl subControl, const QWidget * widget = 0 ) const ; QRect subElementRect ( SubElement element, const QStyleOption * option, const QWidget * widget = 0 ) const; QPixmap standardPixmap(QStyle::StandardPixmap, const QStyleOption*, const QWidget*) const; }; #endif //CIM_Style_H
Dann die "Implementierung"
#include "CIM_Style.h" CIM_Style::CIM_Style() { } CIM_Style::~CIM_Style() { } void CIM_Style::drawComplexControl ( ComplexControl control, const QStyleOptionComplex * option, QPainter * painter, const QWidget * widget ) const { } void CIM_Style::drawControl ( ControlElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget ) const { } void CIM_Style::drawItemPixmap ( QPainter * painter, const QRect & rectangle, int alignment, const QPixmap & pixmap ) const { } void CIM_Style::drawItemText ( QPainter * painter, const QRect & rectangle, int alignment, const QPalette & palette, bool enabled, const QString & text, QPalette::ColorRole textRole ) const { } void CIM_Style::drawPrimitive ( PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget) const { } QPixmap CIM_Style::generatedIconPixmap ( QIcon::Mode iconMode, const QPixmap & pixmap, const QStyleOption * option ) const { return pixmap; } QStyle::SubControl CIM_Style::hitTestComplexControl ( ComplexControl control, const QStyleOptionComplex * option, const QPoint & position, const QWidget * widget ) const { return QStyle::SC_TitleBarMinButton; } int CIM_Style::pixelMetric ( PixelMetric metric, const QStyleOption * option, const QWidget * widget ) const { return 0; } QSize CIM_Style::sizeFromContents ( ContentsType type, const QStyleOption * option, const QSize & contentsSize, const QWidget * widget ) const { return contentsSize; } int CIM_Style::styleHint ( StyleHint hint, const QStyleOption * option , const QWidget * widget , QStyleHintReturn * returnData ) const { return 0; } QRect CIM_Style::subControlRect ( ComplexControl control, const QStyleOptionComplex * option, SubControl subControl, const QWidget * widget ) const { return QRect(0,0,50,50); } QRect CIM_Style::subElementRect ( SubElement element, const QStyleOption * option, const QWidget * widget ) const { return QRect(0,0,50,50); } QPixmap CIM_Style::standardPixmap(QStyle::StandardPixmap, const QStyleOption*, const QWidget*) const { }
Und dann im eigentlichen Programm ein
Tab_bar->setStyle(::new CIM_Style);
Jetzt habe ich garkeine Tabs mehr
Mir ist schon klar dass ich was tuen muß in den Funktionen. Die Frage ist aber was ???
Gruß
-
Les dir erstmal genauer durch, was die einzelnen Funktionen machen. Die QStyle-Doku ist nicht sooo lang, es gibt sogar in den Examples einen eigenen minimalen Style.
Nichts zu machen hab ich nicht gesagt, schau dir an was ich fett geschrieben hab, das für die Funktionen anpassen.
Als Beispiel:void CIM_Style::drawItemPixmap ( QPainter * painter, const QRect & rectangle, int alignment, const QPixmap & pixmap ) const { QApplication::style()->drawItemPixmap(painter, rectangle, alignment, pixmap); }
Du delegierst das Zeichnen einfach an den Default-Style.
Nur das was du selber haben willst (schau mal, vllt. reicht ja eines von styleHint/pixelMetric/subControlRect zu personalisieren).
-
Okay super Riesig.
Rufe jetzt in jeder Funktion in CIM_Style die deflaut Funktion des Defaultstyles auf. (Sofern ich das richtig verstanden habe)Im Nächsten Schritt gucken was die Funktionen machen und dann das verändern, was ich benörige umd die Tabgrößen an zu passen richtig ??
Also irgend eien Funktion mit Paint denke ich
Gruß und danke für Hilfe
-
AlexXXx schrieb:
Also irgend eien Funktion mit Paint denke ich
Jein, das henk vom Umfang deiner Änderungswünsche ab. Willst du echt nur die Größe, reicht es evtl. eine der FUnktionen anzupassen, die was in der Art zurüvkgeben. Schau da mal in die Doku von
* styleHint()
* pixelMetric()
* subControlRect()
* etc
Denn die anderen Funktionen bekommen Rects (über die option), wo sie den Inhalt reinzeichnen sollen, die Rects werden wiederum aus den returns der o.g. Funktionen errechnet.
Aber ich hab selber noch keinen Style gezeichnet, nur hin und wieder aus Interesse in den Code geschaut. Darum kann ich nicht aus dem Stegreif sagen, was du noch alles selber implementieren musst. Darum fang mit den Größen an, vllt. reicht das ja schon
-
Also man kann die Größe der Tabs mit:
sizeFromContents ( ContentsType type, const QStyleOption * option, const QSize & contentsSize, const QWidget * widget ) const
Setzen
Das hat ja ewig gedauert. Und das bei dem Funktionsname.
COOOOOOOOOOL