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

Alles rund um die Programmierung mit Qt
Antworten
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

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

Beitrag 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.
Dateianhänge
frame.jpeg
frame.jpeg (2.89 KiB) 3288 mal betrachtet
Zuletzt geändert von Ritchie am 26. August 2010 19:30, insgesamt 1-mal geändert.
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag von Nvidia »

versuchs ueber das paint-event
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

Beitrag 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
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

Beitrag 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.
Antworten