我想知道对于以下情况可能是最好的方法:
我有一个QML文件,从HTTP服务器加载到Qt / QML安卓应用程序以显示UI。
用户可以点击目录的缩略图,并让应用程序为每个目录下载另一个QML文件。目录QML已下载并存储在设备上以供离线使用。
这意味着我有许多目录具有唯一的ID来存储目录QML和资产。像这样:
/my/app_data_path/catalogs/CATALOG_001
/my/app_data_path/catalogs/CATALOG_007
/my/app_data_path/catalogs/CATALOG_010
在UI中,我想显示一个指示器,告诉您目录是否已经下载到设备。 QML中显示/隐藏指标的最佳方法是什么?
Rectangle {
id: indicator
visible: MyApp.catalogIsLoaded('some ID here')
}
这是我想到的,但我不认为这是最好的方法,因为我需要一个传递目录ID的方法来检查数据目录是否存在。此外,我必须找出一种方法来重新评估可见状态/不时调用catalogIsLoaded
方法 - 尤其是在下载或删除目录之后。
对此有更好/更清洁的方法吗?
答案 0 :(得分:1)
更好的方法是将指标可见性与属性绑定相关联。
如果您希望通过其ID找到目录,请在“MyApp”类上提供一个可调用的方法以返回目录引用。
Q_INVOKABLE Catalog* findCatalogById(const QString& id);
Catalog将是一个QObject,将isLoaded属性公开给QML。
class Catalog : public QObject {
Q_OBJECT
Q_PROPERTY(bool isLoaded READ isLoaded NOTIFY isLoadedChanged)
public:
Catalog(QObject* parent = 0) : QObject(parent) {
}
bool isLoaded() const { return m_isLoaded; }
void setIsLoaded(bool loaded) {
if (m_isLoaded != loaded) {
m_isLoaded = loaded;
emit isLoadedChanged();
}
}
signals:
void isLoadedChanged();
private:
bool m_isLoaded; //should probably be initialized to false
};
当然,您的上下文提供的目录引用应该在某处记忆(如在QHash<QString, Catalog*>
中),并在其状态更改时进行相应更新。