Seite 1 von 1
Background Pixmap bei Widget
Verfasst: 29. Januar 2008 00:21
von pfu
Hallo Zusammen!
bin am verzweifeln. Ich scheitere daran, dass ich einem Widget ein Hintergrundbild gebe.
seit Qt4 ist das ja jetzt ein wenig anderes...
dazu folgendes
meine funktion:
Code: Alles auswählen
void DragWidget::setBackgroundImage(QWidget *fp_widget, const QPixmap *fp_image)
{
QPalette newPalette(fp_widget->palette());
newPalette.setBrush(QPalette::Base, QBrush(*fp_image));
newPalette.setBrush(QPalette::Background, QBrush(*fp_image));
fp_widget->setPalette ( newPalette );
}
diese Funktion möchte ich dann im Konstruktor des Widgets verwenden
kann mir BIITTE jemand sagen, wie der FUnktionsaufruf aussieht?
oder kann mir jemand einen einfacheren weg zeigen wie man einem Widget ein BackgroundWidget verpasst?
Verfasst: 29. Januar 2008 09:07
von upsala
Sieht doch gut aus, oder was soll damit nicht passen?
Verfasst: 29. Januar 2008 10:35
von pfu
ja die Funktion stimmt schon. glaub ich halt. hoff ich halt.
ich schaffts nur nicht die funktion aufzurufen, sodass ich im Widget ein Hintergrundbild habe. wenn ich die funktion im main aufrufe, wird kein hintergrundbild angezeigt, rufe ich die funktion im konstruktor des widgets auf, bekomme ich einen compiler fehler.
Verfasst: 29. Januar 2008 12:12
von Christian81
Ein Compilerfehler hat nichts mit Qt zu tun sondern mit C++. Also würde ich sagen - lernt bitte erstmal C++.
re
Verfasst: 29. Januar 2008 12:31
von pfu
jaja, a bissal aroganter gehts noch, oda?
Verfasst: 29. Januar 2008 12:38
von upsala
Wenn hier jemand Hilfe will, dann soll er auch die Frage präzise stellen und nicht die Hälfte weglassen (wie z.B. deine Compiler-Fehlermeldungen). Der Rest steht in der Signatur von Macman
Verfasst: 29. Januar 2008 12:42
von pfu
ich hab geschrieben:
> diese Funktion möchte ich dann im Konstruktor des Widgets verwenden
> kann mir BIITTE jemand sagen, wie der FUnktionsaufruf aussieht?
ich weiß nicht wieso ihr mich so angehts?
ich hab die Funktion gepostet und möchte nur wissen, wie der funktionsaufruf im Kontruktor aussieht in dem ich das Hintergrundbild einfügen will.
vielleicht drück ich mich ja so undeutlich aus, wenn ja dann bitte ich vielmals um entschuldigung
Verfasst: 29. Januar 2008 12:54
von Christian81
upsala sagte es sollte so gehen - also probiere es aus. Wenn es nicht geht und Du einen Compilerfehler bekommst, zeig was Du gemacht hast und wir helfen Dir. Aber ein Compilerfehler kommt normalerweise nicht davon, dass man irgend einen Fehler in Qt gemacht hat.
Verfasst: 29. Januar 2008 13:39
von pfu
hab jetzt ein tutorial gefunden:
http://my.opera.com/NoobSaibot/blog/show.dml/513685
ich hab dazu folgenden code rauskopiert.
Code: Alles auswählen
QBrush *light = new QBrush( QColor( "white" ) );
// QBrush *window = new QBrush( QPixmap( QApplication::applicationDirPath() + "/graphics/images/splash2.png" ) );
QBrush *window = new QBrush( QPixmap(":/images/boat.png") );
QPalette *palette = new QPalette(
*light,
*light,
*light,
*light,
*light,
*light,
*light,
*light,
*window
);
dW->setPalette( *palette );
lässt sich zwar compilieren, aber der Hintergrund vom widget bleibt immer noch weiß

Verfasst: 29. Januar 2008 13:44
von Christian81
gibt es ":/images/boat.png" auch in deiner Resource?
Verfasst: 29. Januar 2008 14:36
von pfu
ja gibt es. und das bild wird auch angezeigt, wenn ich es als Label Pixmap ausgebe
Verfasst: 29. Januar 2008 16:27
von Christian81
Abgesehen davon dass Du mit den ganzen 'new' - Zeugs memleaks erzeugst, sehe ich gerade keinen Fehler.
In deiner ersten Version hast Du base auch noch auf das Image gesetzt, das machst Du jetzt nicht mehr.
Verfasst: 29. Januar 2008 18:54
von upsala
QPalette::Base ist nicht notwendig, da ja nur der Background gesetzt werden soll. QPalette::Background ist eigentlich 'obsolete' man sollte stattdessen QPalette::Window nehmen. Funktioniert aber trotzdem. Also muß der Fehler woanders liegen.
Verfasst: 29. Januar 2008 23:21
von ObeliX
Code: Alles auswählen
QPalette qPalette(palette());
qPalette.setBrush(QPalette::Window,QBrush(QPixmap("Background.jpg")));
setPalette(qPalette);
also bei mir funzt das hier problemlos. im konstruktor des widgets (bei meinem test war es nen QMainWiindow) aufgerufen - fertig !
gruß Obel