Hintergrund bei einem QMdiArea

Verschiedenes zu Qt
Antworten
TheProgrammer
Beiträge: 22
Registriert: 27. Oktober 2007 17:15

Hintergrund bei einem QMdiArea

Beitrag von TheProgrammer »

Hey,

Also ich hätte eine Problem und zwar hab ich ein QMdiArea und will ein Hintergrundbild setzen.
Das mache ich mit mdiArea->setStyleSheet...
Das Problem ist allerdings, dass jetzt nicht das MdiArea selbst ein Hintergrundbild hat sondern lediglich die einzelnen MDI Fenster, die auf dem Area geöffnet werden. Es sollte allerdings genau umgekehrt sein.

Hat jemand eine Idee wie ich das bewerkstelligen kann?
Schonmal vielen dank für eure Hilfe

TheProgrammer
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QMdiArea ist zugleich eine QAbstractScrollArea und hat somit ein Viewport-Widget dem man solche Eigenschaften zuweisen kann. (Z.B. auch über QPalette...)
TheProgrammer
Beiträge: 22
Registriert: 27. Oktober 2007 17:15

Beitrag von TheProgrammer »

Hey,

Vielen dank schonmal.
Aber wie krieg ich einen zeiger auf dieses Viewportwidget?
Ich finde mal bei QMdiArea keine Methode die irgendeinen verweis auf soetwas zurückgibt.

mfg
TheProgrammer
TheProgrammer
Beiträge: 22
Registriert: 27. Oktober 2007 17:15

Beitrag von TheProgrammer »

Ach ich war im falschen fenster.
ich habs gefunden!

Allerdings funktioniert es zumindest mit StyleSheets trotzdem nicht.
Auch wenn der code dann so aussieht:

Code: Alles auswählen

    mdiArea->viewport ( )->setStyleSheet(QString::fromUtf8("background-image: url(C:/IWMDBModeler/IWMDBModeler/IWMDBModeler/Resources/background.PNG);"));
setzt er das Bild trotzdem bei den MDi Fenstern und nicht bei dem MDI Area als Hintergrund.
TheProgrammer
Beiträge: 22
Registriert: 27. Oktober 2007 17:15

Beitrag von TheProgrammer »

Hey,

hat keiner eine Idee wie man das Problem beheben kann?
chrislo1976
Beiträge: 105
Registriert: 24. Februar 2008 09:45

Beitrag von chrislo1976 »

Hallo!

Ich habe es bei mir so gelöst dass ich eine Klasse von QMdiArea abgeleitet habe (z.B. QMdiAreaEx) und darin dann das paintEvent überschrieben habe.

So kann ich im Hintergrund des MDI-Bereichs ein Logo anzeigen, und dies z.B. verkleinern wenn das Fenster selbst kleiner als ein bestimmter Wert wird:

Code: Alles auswählen

void QMdiAreaEx::paintEvent(QPaintEvent* paintEvent)
{
	QPainter painter(viewport());

	QRect rc = painter.viewport();
	QPixmap pixmap(":/gfx/img/logo_gross.png");

	int rcw = rc.width();
	int rch = rc.height();

	int pmw = pixmap.width();
	int pmh = pixmap.height();

	if (rcw < pmw)
	{
		pixmap = pixmap.scaledToWidth(rcw, Qt::SmoothTransformation);
		pmw = pixmap.width();
		pmh = pixmap.height();
	}

	if (rch < pmh)
	{
		pixmap = pixmap.scaledToHeight(rch, Qt::SmoothTransformation);
		pmw = pixmap.width();
		pmh = pixmap.height();
	}

	int x = (rcw - pmw) / 2;
	int y = (rch - pmh) / 2;

	painter.fillRect(rc, QBrush(QColor(192,192,192), Qt::SolidPattern));
	painter.drawPixmap(x, y, pixmap);
}
(Ist evtl. nicht optimal, funktioniert aber genau so wie ich das haben möchte:)

HTH
Christian
TheProgrammer
Beiträge: 22
Registriert: 27. Oktober 2007 17:15

Beitrag von TheProgrammer »

Vielen dank.
So werd ichs auch machen!
Antworten