これは実際にrefreshableSource
プロパティを変更しますので、RefreshableImage { source: "image.jpg" }
のように直接カスタムアイテム登録
class DirectImage : public QQuickPaintedItem
{
Q_OBJECT
Q_PROPERTY(QImage image READ image WRITE setImage NOTIFY imageChanged)
public:
void paint(QPainter *painer);
void setImage(const QImage &image);
};
void DirectImage::paint(QPainter *painter)
{
painter->drawImage(m_image.scaled(width(), height()):
}
void DirectImage::setImage(const QImage &image)
{
m_image = image;
emit imageChanged();
setImplicitWidth(image.width());
setImplicitHeight(image.height());
update();
}
とモデルからQImageのを使用するためのラフな骨格を、それを使用することができ
import QtQuick 2.0
Image {
id: root
property alias actualUnderlyingSource: root.source //this refers to Image.source and not the newly created source alias
property alias source: root.refreshableSource
property string refreshableSource
actualUnderlyingSource: refreshableSource
function refresh() {
actualUnderlyingSource = "";
actualUnderlyingSource = Qt.binding(function() { return refreshableSource });
}
}
via
qmlRegisterType<DirectImage>("MyElements", 1, 0, "RefreshableImage");
via
import MyElements 1.0
// ...
RefreshableImage {
image: model.image
}
モデルは単に画像の役割を求めたとき、QImage
を返すたびに画像が変化する画像の役割を持つdataChanged()
信号を発します。
イメージは、オンデマンドで生成する必要がある場合は、最初に空のイメージまたはプレースホルダーイメージを返し、実際のコンテンツが利用可能なときにdataChanged()
シグナルを送出できます。
「イメージ」を同じ 'ソース 'などで更新する必要があるのはなぜですか?それは同じイメージではありませんか? – folibis
@folibisは技術的にはyesですが、基礎となるデータは変更されています。私たちはQML ImageProvidersを使用して、データ構造からQimagesをQMLに供給します。私たちが使用するidは、システム内のイメージのuuidです。したがって、uuidから実際のオブジェクトを取得できます。簡単にするために、このuuidを再利用しています。 – rubenvb
ああ、質問でこれを指定する必要があります。私はそれが重要だと思う。 – folibis