2013-04-10 8 views
6

Meine Qt-Anwendung hat ein großes Stylesheet mit vielen Seitenrändern, Pixeln und anderen Dingen, die direkt auf Zeichnung und Grafik basieren. Ich würde gerne alles dem Designer geben, aber das Stylesheet wird in der .ui-Datei gespeichert, was für den Designer nicht praktisch ist; Sie würde lieber eine separate Datei sehen und sie mit ihren üblichen Tools bearbeiten.Wie verschiebe ich ein Qt-Stylesheet in eine externe Datei, aber lasse es in Ressourcen kompiliert?

Ich möchte das Stylesheet in eine externe .qss-Datei verschieben, diese Datei zu den Programmressourcen hinzufügen und sie mit der .ui-Datei verknüpfen, damit das Stylesheet vom Widget automatisch kompiliert und verwendet wird und die Anwendung müsste die Stylesheet-Datei nicht behalten und zur Laufzeit laden.

Wie erreicht man das?

Antwort

11

Kopieren Sie alle Ihre Stile in eine Datei und benennen Sie sie in so etwas wie stylesheet.qss Dann fügen Sie es in Ihrer qrc Datei als ein neues Hilfsmittel ein. Sie können dies einfach tun, indem Sie Ihre qrc Datei bearbeiten, wenn Sie bereits eine haben. Refer documentation zum Hinzufügen einer neuen Ressource.

Dann ändern Sie Ihren Code wie folgt, um den Inhalt der Datei qss zur Laufzeit zu lesen und Stile auf Ihre Anwendung anzuwenden.

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QFile file(":/stylesheet.qss"); 
    if(file.open(QIODevice::ReadOnly | QIODevice::Text)) 
    { 
     a.setStyleSheet(file.readAll()); 
     file.close(); 
    } 

    MainWindow w; 
    w.show(); 

    return a.exec(); 
} 

Hinweis: Wenn Sie eine Änderung in der stylesheet.qss tun, müssen Sie die Datei qrc kompilieren, um die Änderungen zu übernehmen.

+1

Einfach genug und direkt auf den Punkt, danke! –

+0

Diese Ressource ist auch sehr nützlich: [https://www.youtube.com/watch?v=sWIQIi4lg58](https://www.youtube.com/watch?v=sWIQIi4lg58) – nono

+0

Nicht sicher warum, aber Code oben hat nicht für mich gearbeitet (Qt 5.9.1). Ich habe QByteString in den QString umgewandelt und alles funktioniert jetzt: 'QString style (file.readAll()); a.setStyleSheet (Stil); ' – semanser

2

Ich setze das Stylesheet, wenn die Anwendung von einer externen Datei ausgeführt wird. Auch für den Designer haben wir eine Schaltfläche hinzugefügt, um Stylesheets neu zu laden. Auf diese Weise kann der Designer die Datei ändern und die Änderungen sofort ausprobieren.

Zum Beispiel:

QFile styleFile("stylesheet.qss"); 
styleFile.open(QFile::ReadOnly); 
QByteArray bytes = styleFile.readAll(); 
QApplication *app = (QApplication*)QApplication::instance(); 
app->setStyleSheet(newStyleSheet);