2010-12-16 5 views
6

nicht einstellen Ich führe meine Qt-App über die Befehlszeile mit einem Parameter-Stylesheet. Die Stile für die Steuerelemente funktionieren, aber nicht wenn ich versuche, ein Hintergrundbild für das MainWindow zu laden. Ich habe versucht:Kann das Hintergrundbild in Qt Stylesheet

QMainWindow{ 
background-image:url(:image_256_8bit_latest_back.png); 
} 

auch versucht, das Entfernen des „:“ im Hintergrund, aber keinen Unterschied machen. Kann mir jemand sagen, was mit diesem StyleSheet nicht stimmt?

Antwort

12

Wo befindet sich das Bild, das Sie verwenden möchten?

Haben Sie es als resource Ihrer Anwendung?

Wenn Sie ein Bild verwenden möchten, das Teil Ihrer Ressourcen ist, sollten Sie eine Ressourcendatei (*.qrc) in Ihrem Projekt haben.

<RCC> 
    <qresource prefix="/images"> 
     <file alias="sunset.jpg">sunset.jpg</file> 
    </qresource> 
</RCC> 

Dann Sie diesen Code im Konstruktor Ihrer QMainWindow schreiben konnte: Diese Datei so etwas wie dieses enthalten sollte

setStyleSheet("background-image: url(:/images/sunset.jpg);"); 

Wenn Sie die Qt resource system nicht verwenden möchten, können Sie einfach setzen Sie den Pfad zu Ihrem Bild auf Ihrer Festplatte:

setStyleSheet("background-image: url(res/images/sunset.jpg);"); 

obwohl Seien Sie vorsichtig, wenn Sie einen relativen Pfad verwenden: Qt wird von der aktuellen Position starten, die möglicherweise Änderung, besonders wenn Sie mit Qt Creator entwickeln.

Mit Qt Creator, wenn Sie Ihre App im Debug-Modus ausführen, ist der aktuelle Pfad in debug/. Wenn Sie Ihre App im Freigabemodus ausführen, befindet sich der aktuelle Pfad in release/ (es sei denn, Sie haben die Einstellungen geändert).

+1

danke für die info :). Der Grund, warum ich eine separate QSS-Datei haben möchte, liegt darin, dass die Benutzer in der Lage sein sollen, die Anwendung anzupassen, indem sie einfach ihre eigene QSS-Datei laden. So dass, wenn in der Eingabeaufforderung ausgeführt wurde, könnte es leicht alle Stile aus der QSS-Datei anwenden, ohne den Code zu berühren ... – Owen

+1

Das bedeutet, dass das Bild irgendwo auf der Festplatte ist. Aber wenn man den Pfad mit ':' tells Qt startet, ist das Bild eine Ressource. Haben Sie versucht, den absoluten Bildpfad in Ihr Stylesheet zu setzen? –

+0

Ich habe versucht, eine Datei mit dem Namen 'stylesheet.qss' zu erstellen, die sich in meinem App-Ordner befindet, der etwa folgendes enthält:' QMainWindow {\t background-image: url (sunset.jpg); } '. Ich starte die App mit dem Argument '-stylesheet = stylesheet.qss' und der Hintergrund meiner App ist das Sonnenuntergang-Bild. Ich verstehe nicht, warum das nicht für dich funktioniert. –

0

Offensichtlich gibt es ein Problem mit dem Pfad zu Ihrem Bild. Verwenden Sie einen absoluten Pfad, um zu überprüfen, ob das Bild von QT geladen wurde und funktioniert.

+0

Es gibt kein Problem mit dem Pfad, denn es funktioniert wie ein Bild für die Schaltflächen ... :) – Owen