Seite 1 von 1

Hintergrund bei einem QMdiArea

Verfasst: 11. Juli 2008 10:27
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

Verfasst: 11. Juli 2008 12:31
von upsala
QMdiArea ist zugleich eine QAbstractScrollArea und hat somit ein Viewport-Widget dem man solche Eigenschaften zuweisen kann. (Z.B. auch über QPalette...)

Verfasst: 11. Juli 2008 15:02
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

Verfasst: 11. Juli 2008 15:15
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.

Verfasst: 22. Juli 2008 08:36
von TheProgrammer
Hey,

hat keiner eine Idee wie man das Problem beheben kann?

Verfasst: 22. Juli 2008 11:18
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

Verfasst: 23. Juli 2008 10:51
von TheProgrammer
Vielen dank.
So werd ichs auch machen!