css 是否可以将外部样式表应用于QT设计器UI文件?

rn0zuynd  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(135)

我想从文本文件加载CSS并将其应用到QT设计器.ui文件。在我看来这是不可能的,但我想确保。
我想做的是

auto MainPage = new QWidget(this);
  MainPage->setStyleSheet(cssLoadedFromTextFile); // I want to load my own CSS before setting up the QT Designer widget, and have that CSS be applied to that widget
  m_ui = new Ui::MainPage; // CSS class auto-generated from QT Designer .ui file
  m_ui->setupUi(MainPage);

在从UI文件编译的C++文件中,setStyleSheet再次被调用,覆盖了我写的css。请注意,是空字符串。即使Qt Designer中没有向.ui文件添加CSS,也会发生这种情况。

// inside m_ui->setupUi, in auto-generated class
MainPage->setStyleSheet(QString()) // a stylesheet is applied to MY C++ widget

如果我注解掉它,我会看到cssLoadedFromTextFile,我的子小部件(在QT设计器中创建的.ui文件)看起来很好--应用了cssLoadedFromTextFile,但这在自动生成的文件中是不可行的。
有没有一种方法可以避免在自动生成的c文件中添加这个空样式表?或者有没有其他方法可以将外部样式表应用于QT设计器中定义的小部件,这样我就可以在这些小部件之间共享样式,以及手动编写的C创建的样式?

qfe3c7zg

qfe3c7zg1#

您可以执行以下操作之一:

  • QApplication构造函数中一次性设置整个应用程序的样式表(见此处),正确的方法是将其作为参数传递给可执行命令。

正如您可能已经猜到的,这样做适用于您创建的所有小部件,除非您覆盖它们的样式表

  • 按照您现在的方式设置小部件的样式表,但是调用setupUi之后。

我不知道为什么你说你想在调用setupUi之前这样做:来自样式表的属性被评估,首先从部件本身阅读它,然后从其父部件、祖父部件等等读取它,最后从应用程序读取它。
通过调用以下命令不会覆盖MainPage的子小部件上的样式表集:

MainPage->setStyleSheet(...)

相关问题