2017-07-24 1 views
1

eingestellt werden. Ich versuche, einige Stile für alle QLineEdits in meiner Anwendung festzulegen. Im Folgenden finden Sie den Code ein:Stylesheet-Eigenschaften können nicht mit der qss-Datei

QLineEdit { 
    border: none; 
    padding-bottom: 2px; 
    border-bottom: 1px solid black; 
    color: #000000; 
    background-color:rgba(0,0,0,0); 
} 
QLineEdit:focus{ 
    border: 0px solid white; 
    border-bottom: 2px solid #2196F3; 
    color: #000000; 
} 

Wenn ich diesen Stil Eingang der GUI heißt, indem die Sheet Option in Formulareditor für jeden einzelnen LineEdit verwenden, es funktioniert.

enter image description here

aber wenn ich versuche, den gleichen Code unter Verwendung einer qss Datei in Ressourcen hinzuzufügen, es funktioniert nicht. Ich verwende den folgenden Code zum Anwenden von Stylesheet:

#include "mainwindow.h" 
#include <QApplication> 
#include <QFile> 
#include <conio.h> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
// QFile styleFile(":/Stylesheets/QLineEdit.qss"); 
// styleFile.open(QFile::ReadOnly); 
// std::printf("hi0"); 

// // Apply the loaded stylesheet 
// QString style(styleFile.readAll()); 
// a.setStyleSheet(style); 

    QFile file(":/Stylesheets/QLineEdit.qss"); 
    file.open(QFile::ReadOnly); 
    QString styleSheet = QLatin1String(file.readAll()); 
    a.setStyleSheet(styleSheet); 

    MainWindow w; 
    w.show(); 
    return a.exec(); 
} 

Was könnte das Problem hier sein?

Edit: Hinzufügen von Code für die QPushButton:

QPushButton, QPushButton:focus { 
    background-color:#2196F3; 
    border: none; 
    color: white; 
    padding: 3px 20px; 
} 


QPushButton:hover, QPushButton:hover:focus { 
    background-color: #1976D2; 
    border-color: #ffffff; 
} 



QPushButton:pressed, 
QPushButton:pressed:focus { 
    background-color: #388E3C; 
    border: none; 
    color: white; 
} 

QPushButton:disabled { 
    color: #cccccc; 
    background-color: #cccccc; 
    border: none; 
} 
+1

Versuchen Sie, 'file.open (QFile :: ReadOnly);' durch 'file.open (QFile :: ReadOnly | QFile :: Text) zu ersetzen;' – scopchanov

+0

Also, hat es funktioniert? – scopchanov

+0

Ich denke, es ist ein Fehler mit Qt coz Ich habe verschiedene Ergebnisse mit qss-Datei und über die Eingabe direkt in Form ui bekommen. Für dieses Problem habe ich versucht mit einer anderen Datei (anderer Name) mit gleichen Inhalten und es hat funktioniert. –

Antwort

1

Lassen Sie uns das Ergebnis der Diskussion zusammenzufassen.

Ersetzen Sie die file.open(QFile::ReadOnly); mit file.open(QFile::ReadOnly | QFile::Text);QFile :: Text wichtig, denn:

Die QIODevice :: Text-Flag zu öffnen() übergeben erzählt Qt im Windows-Stil Linie Terminatoren zu konvertieren ("\ r \ n ") in C++ - Style-Terminatoren (" \ n "). Standardmäßig geht QFile von binär aus, d. H. Es führt keine Konvertierung für die in der Datei gespeicherten Bytes durch.

Wenn darüber hinaus das Stylesheet global einstellen, gibt es einige Besonderheiten, die berücksichtigt werden sollten:

A Sheet wirkt sich auf das Widget und alles unten in der Hierarchie des Widgets. Wenn sie explizit für ein Widget festgelegt werden (aus dem Code oder mithilfe des Formulareditors), sind die übergeordneten Elemente des Widgets nicht betroffen, so als wären sie für die gesamte Anwendung festgelegt. Z.B. Wenn Sie für ein bestimmtes Widget Folgendes einstellen: QWidget { background-color: red; }, wird dieses Widget und alle seine untergeordneten Objekte einen roten Hintergrund haben. Wenn Sie für die gesamte Anwendung dasselbe Stylesheet aus der qss-Datei festlegen, werden alle Widgets rot hinterlegt. Daher sollte sehr viel Sorgfalt auf die Vererbung zwischen den Widgets verwendet werden. Die Verwendung der richtigen selector types ist dann entscheidend.

Verwandte Themen