QT:来自资源QSS文件的setStyleSheet?

Jas*_*enX 13 qt

在我的小部件中,我可以做类似的事情:

MyWindow::MyWindow(QWidget *parent) :
    QWidget(parent)
{
    ui.setupUi(this);
    setStyleSheet("QWidget { background-color: red }");  // <--- HERE
}
Run Code Online (Sandbox Code Playgroud)

这会将小部件背景设置为红色.

我的资源中有一个QSS文件.我如何指示我的小部件从那里获取其样式表内容,而不仅仅是将qss语法作为参数?

Rom*_*lov 19

作为为每个窗口小部件设置样式表的替代方法,您只需为整个应用程序加载和设置样式表.像这样的东西:

QApplication app( argc, argv );

// Load an application style
QFile styleFile( ":/style.qss" );
styleFile.open( QFile::ReadOnly );

// Apply the loaded stylesheet
QString style( styleFile.readAll() );
app.setStyleSheet( style );
Run Code Online (Sandbox Code Playgroud)

在这种情况下,所有小部件将自动从给定的样式表中选择其样式.


Jas*_*enX 18

得到它:你实际上必须从资源"读取文件",将其转换为QString并将其提供给setStyleSheet.例如:

QFile file(":/qss/default.qss");
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
setStyleSheet(styleSheet);
Run Code Online (Sandbox Code Playgroud)

  • 什么是EnsurePolished? (3认同)
  • 但是不要忘记调用ensurePolished(),否则可能不会应用新的样式表. (2认同)
  • @ffttyy这样可以确保将新样式实际应用于小部件。我曾经遇到过其他情况下未应用新样式的情况。 (2认同)