如何将Qt样式表移动到外部文件,但保持它在资源中编译
How to move a Qt stylesheet to an external file but keep it compiled in resources?
我的Qt应用程序有一个很大的样式表,有很多边距、像素和其他直接基于和相关的绘图和图形的东西。我很乐意把所有的东西给设计师,但样式表保存在。ui文件,这是不方便的设计师;她更喜欢看一个单独的文件,然后用她常用的工具编辑它。
我想要的是将样式表移动到外部.qss文件中,将该文件添加到程序资源中并将其链接到.ui文件,这样小部件就可以自动编译和使用样式表,应用程序就不必保留样式表文件并在运行时加载它。
如何实现?
将所有样式复制到一个文件中,并将其重命名为stylesheet.qss
然后将其作为新的资源项包含在qrc
文件中。你可以简单地通过编辑你的qrc
文件来做到这一点,如果你已经有一个。请参阅有关如何添加新资源的文档。
然后像这样修改您的代码,以便在运行时读取qss
文件的内容并将样式应用到您的应用程序。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFile file(":/stylesheet.qss");
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
a.setStyleSheet(file.readAll());
file.close();
}
MainWindow w;
w.show();
return a.exec();
}
注意:当你在stylesheet.qss
中做更改时,你必须编译qrc
文件以使更改生效。
我在应用程序从外部文件运行时设置样式表。此外,我们为设计器添加了一个按钮来"重新加载样式表"。这样设计人员就可以修改文件并立即尝试更改。
例如:QFile styleFile("stylesheet.qss");
styleFile.open(QFile::ReadOnly);
QByteArray bytes = styleFile.readAll();
QApplication *app = (QApplication*)QApplication::instance();
app->setStyleSheet(newStyleSheet);
相关文章:
- 具有瞬态资源的RAII类
- 二叉排序树无法编译
- 使用 Bazel 编译 QT 应用程序时访问资源
- Qt - 为什么Visual Studio 2019在qml资源中添加10Mb文件后无法再编译我的项目?
- 减少使用 GSL 用于 ODE 系统的编译资源
- MSBuidel - 将资源文件添加到项目后静态库编译失败
- 如果我必须组织编译资源,那是不好的做法吗?
- 使用资源文件编译C++时出错
- 如果我在Visual Studio项目中将图像作为资源包含在内,这些图像是否会编译到可执行文件中
- Visual Studio 2012 中的条件资源编译
- Qt资源文件不会在不编译的情况下更新
- 如果 qrc 资源被正确编译到二进制文件中,它们会在哪里丢失
- 资源编译器无法在Win32的资源脚本中编译枚举语句
- clang 在 Coliru 中编译此代码段,但不在编译器资源管理器中编译.为什么
- 用*.h和*编译扩展文件.所以没有*.cpp资源代码
- c++编译类型资源所有者断言
- 如何将Qt样式表移动到外部文件,但保持它在资源中编译
- 无法在C++Builder 2006中编译应用程序清单的资源
- 调试MSVC2010 Express和Qt 4.8 (Qt Creator 2.4.1)下的资源文件编译(rc.exe)
- 使用QT5_ADD_RESOURCES和CMake进行多线程编译时,资源.cpp文件已损坏