我在我的新小部件中使用样式表。我想添加一个重新加载按钮,仅用于设计。所以我在Resouces /.../ xxx.qrc文件中添加一个stylesheet.txt作为样式表来申请我的小部件。我有一个QPushButton触发setStyleSheet()与QFile打开stylesheet.txt。我想用系统中的defaut编辑器编辑程序外的txt。但是我发现资源文件没有刷新,这意味着当我编辑txt时,txt没有在程序中重新加载。请问我该如何重新加载文件或任何解决方案?
答案 0 :(得分:1)
编译时,资源嵌入到二进制文件中。如果您编辑其中一个资源文件,则必须重建该应用程序。因此,如果您想在不重新编译/重新启动的情况下动态更改样式,只需从外部文件加载样式表,而不是从资源加载样式表。
答案 1 :(得分:1)
来自Qt Doc:
“Qt资源系统是一种独立于平台的机制,用于在应用程序的可执行文件中存储二进制文件。如果您的应用程序总是需要一组特定的文件(图标,翻译文件等),那么这很有用。不想冒失去文件的风险。“
资源存储在二进制文件中,只有在重建应用程序时才能更新它们。使用其他文件加载样式表。
答案 2 :(得分:1)
一般建议:在调试/设计期间不要将资源放在.qrc中。我建议改为使用QDir::setSearchPaths
:
void Application::setDirs()
{
#ifdef QT_DEBUG
QDir dir( QGuiApplication::applicationDirPath() );
dir.cd( "C:/DotaClient" );
QDir::setSearchPaths( "qml", QStringList( dir.absolutePath() ) );
#else
QDir::setSearchPaths( "qml", QStringList( ":/DotaClient/" ) );
#endif
}
访问:
m_mainView->setSource( QUrl( "qml:Root/Root.qml" ) );
或类似QSS中的background-image:url(images:Root/root_bg.png);
。
在这种情况下,文件Root.qml
将在调试版本中C:/DotaClient/Root/Root.qml
中查找(可能有动态重新加载),在:/DotaClient/Root/Root.qml
中(在资源中)在版本构建中查找。