无法使用qss文件设置样式表属性

时间:2017-07-24 10:41:04

标签: c++ qt qt5 stylesheet qtstylesheets

我正在尝试为我的应用程序中的所有QLineEdits设置一些样式。以下是代码:

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

当我使用GUI输入这种风格时,即在表单编辑器中为每个单独的lineEdit设置样式表选项,它就可以工作。

enter image description here

但是当我尝试在资源中使用qss文件添加相同的代码时,它不起作用。我使用以下代码来应用样式表:

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

这可能是什么问题?

编辑:为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 个答案:

答案 0 :(得分:1)

让我们总结一下讨论的结果。

file.open(QFile::ReadOnly);替换为file.open(QFile::ReadOnly | QFile::Text); QFile :: Text 非常重要,因为:

  

传递给open()的QIODevice :: Text标志告诉Qt转换   Windows风格的行终止符(“\ r \ n”)成为C ++风格的终结符   ( “\ n”)。默认情况下,QFile采用二进制,即它不执行任何操作   转换存储在文件中的字节。

此外,在全局设置样式表时,应考虑一些细节:

样式表会在窗口小部件的层次结构中影响窗口小部件及其下面的所有内容。如果显式设置窗口小部件(从代码或使用窗体编辑器),窗口小部件的父窗口不会受到影响,就好像它是为整个应用程序设置的一样。例如。如果您为特定窗口小部件设置了以下内容:QWidget { background-color: red; },则此窗口小部件及其所有子窗口将具有红色背景。如果从整个应用程序的qss文件设置相同的样式表,则所有窗口小部件都将具有红色背景。因此,应该对小部件之间的继承性采取非常谨慎的态度。然后使用正确的selector types至关重要。