Qt/QML:根据是否下载内容显示指示器
Qt/QML: Display an indicator depending on if something is downloaded or not
我想知道以下情况的最佳方法是什么:
我有一个 QML 文件,它从 HTTP 服务器加载到 Qt/QML android 应用程序以显示 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 中 show/hide 指标的最佳方法是什么?
Rectangle {
id: indicator
visible: MyApp.catalogIsLoaded('some ID here')
}
这是我的想法,但我认为这不是最好的方法,因为我需要一种方法来传递目录 ID 以检查数据目录是否存在。此外,我还必须想出一种方法来不时地重新评估可见的 state/call catalogIsLoaded
方法 - 特别是在下载或删除目录之后。
是否有 better/cleaner 方法?
更好的方法是将指标可见性与 属性 绑定相关联。
如果您希望通过 ID 查找目录,请在 'MyApp' class 上提供一个可调用方法以 return 目录引用。
Q_INVOKABLE Catalog* findCatalogById(const QString& id);
Catalog 将是一个 QObject,向 QML 公开一个 isLoaded 属性。
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*>
中),并在其状态更改时相应地更新。
我想知道以下情况的最佳方法是什么:
我有一个 QML 文件,它从 HTTP 服务器加载到 Qt/QML android 应用程序以显示 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 中 show/hide 指标的最佳方法是什么?
Rectangle {
id: indicator
visible: MyApp.catalogIsLoaded('some ID here')
}
这是我的想法,但我认为这不是最好的方法,因为我需要一种方法来传递目录 ID 以检查数据目录是否存在。此外,我还必须想出一种方法来不时地重新评估可见的 state/call catalogIsLoaded
方法 - 特别是在下载或删除目录之后。
是否有 better/cleaner 方法?
更好的方法是将指标可见性与 属性 绑定相关联。
如果您希望通过 ID 查找目录,请在 'MyApp' class 上提供一个可调用方法以 return 目录引用。
Q_INVOKABLE Catalog* findCatalogById(const QString& id);
Catalog 将是一个 QObject,向 QML 公开一个 isLoaded 属性。
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*>
中),并在其状态更改时相应地更新。