Seite 1 von 1

[gelöst]QT 4.5: Rahmen eines QMdiSubWindow komplett ..

Verfasst: 15. August 2010 14:24
von Ritchie
Hallo Zusammen,

ich versuche derzeit den Rahmen eines QMdiSubWindow Fenster komplett zu entfernen, aber es bleibt ein Rest von Rahmen über.

Wie bekomme ich den noch weg ?

Die folgenden Flags setze ich schon.

Code: Alles auswählen

		Windowsflags |= Qt::FramelessWindowHint;
Gleiche Farbe wie Hintergrund wäre auch eine Lösung, nur wie ?

Gruss R.

Verfasst: 15. August 2010 20:57
von Nvidia
versuchs ueber das paint-event

Verfasst: 16. August 2010 17:39
von Ritchie
Hi,

derzeit kenne ich den Paint-Event nur so, das ich auf den Inhalt eines Fensters Einfluss habe, aber nicht auf das Fenster selber (den Rahmen).

Gruss R.

Verfasst: 16. August 2010 18:20
von franzf
Da du nicht weißt, was der Style am Ende alles macht, ohne dich zu fragen, bleibt dir in solchen extremen Anpassungen nur eines: Schreib dir einen eigenen Style :P
Das muss jetzt kein kompletter Style sein. Entwirf deinen Style als Proxy, der fast überall nur den qApp->style()->xyz() zurück gibt. Nur die Elemente, die du selber Stylen willst, malst du selber/gibst die passenden hints zurück.
http://www.qtcentre.org/wiki/index.php? ... roxy_style
Den Proxy dann aber nur für dein Mdi-Window setzen.

Verfasst: 16. August 2010 20:02
von Ritchie
Das scheint ein Weg zu sein. Sieht zwar sportlich aus, aber ...

Danke für den Tip, hatte sowas irgendwo mal gelesen, aber nicht wieder gefunden, wo ich ansetzen soll.

Gruss Ritchie

Verfasst: 25. August 2010 18:12
von Ritchie
Hallo Zusammen,

habe meine Proxy Class fertig.

Nur wird die Routine

Code: Alles auswählen

void	MyMDIStyle::drawPrimitive (	PrimitiveElement element, 
																		const QStyleOption *option, 
																		QPainter *painter, 
																		const QWidget *widget) const
{
	if( element == QStyle::PE_FrameWindow )
		{
		qDebug() << "PE_FrameWindow" ;
		}
	else
		{
		ProxyStyle::drawPrimitive (	element, option,painter, widget);
		}
}

nicht durchlaufen.

Dachte da an Element:

Code: Alles auswählen

QStyle::PE_FrameWindow	?	Frame around a MDI window or a docking window.
Derzeit wird nur:

Code: Alles auswählen

pixelMetric,
polish,
styleHint,
subControlRect,
durchlaufen.

Ich habe das Beispiel von QTCentreWiki genommen und entsprechend angepasst.

Habe die Ursache gefunden:

Code: Alles auswählen

Windowsflags |= Qt::FramelessWindowHint; 
scheint den drawPrimitive bereits abzuknippsen.

Der Rahmen kommt nicht vom MDI Fenster, sondern von einem
QGraphicsView.

Man benötigt also kein eigenes Style, um den Rahmen abzuschalten.

Code: Alles auswählen

	GraficView->setFrameStyle( QFrame::NoFrame );
Reicht vollkommen aus. ;-)

Gruss R.