2017-07-24 3 views
1

J'essaie de définir des styles pour tous les QLineEdits de mon application. Voici le code:Impossible de définir les propriétés de la feuille de style en utilisant le fichier qss

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; 
} 

Quand je entrée ce style en utilisant le i.e. GUI en définissant l'option de feuille de style dans l'éditeur de formulaire pour chaque personne lineEdit, cela fonctionne.

enter image description here

Cependant lorsque je tente d'ajouter le même code à l'aide d'un fichier qss dans les ressources, il ne fonctionne pas. J'utilise le code suivant pour appliquer la feuille de style:

#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(); 
} 

Quel pourrait être le problème ici?

Edit: Ajout de code pour la 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

Essayez de remplacer 'file.open (QFile :: ReadOnly);' par 'fichier.open (QFile :: ReadOnly | QFile :: Text);' – scopchanov

+0

Alors, cela a-t-il fonctionné? – scopchanov

+0

Je suppose que c'est un bug avec Qt coz J'ai obtenu des résultats différents avec le fichier qss et via l'entrée directement dans la forme ui. Pour ce problème, j'ai essayé avec un autre fichier (nom différent) avec le même contenu et cela a fonctionné. –

Répondre

1

Résumons l'issue de la discussion.

Remplacer le file.open(QFile::ReadOnly); avec file.open(QFile::ReadOnly | QFile::Text);QFile :: Texte est important, parce que:

QIODevice :: drapeau de texte passé à ouvrir() dit Qt pour convertir terminateurs en ligne de style Windows ("\ r \ n ") dans des terminateurs de style C++ (" \ n "). Par défaut, QFile suppose un binaire, c'est-à-dire qu'il n'effectue aucune conversion sur les octets stockés dans le fichier.

En outre, lors du réglage du niveau mondial stylesheet, il y a des spécificités qui doivent être prises en compte:

Une feuille de style affecte le widget et tout en dessous dans la hiérarchie du widget. S'il est défini explicitement pour un widget (à partir du code ou à l'aide de l'éditeur de formulaire), les parents du widget ne sont pas affectés, comme s'ils étaient définis pour l'ensemble de l'application. Par exemple. si vous définissez ce qui suit: QWidget { background-color: red; } pour un widget particullar, ce widget et tous ses enfants auront un arrière-plan rouge. Si vous définissez la même feuille de style à partir du fichier qss pour l'ensemble de l'application, tous les widgets auront un arrière-plan rouge. Il faut donc faire très attention à l'héritage entre les widgets. En utilisant le droit selector types est alors crucial.