QMLビューのスナップショットをディスクのどこかに保存したいと考えています。QMLビューのスナップショットを取る
これは可能ですか?
calendar.grabToImage(function(result) { result.saveToFile("something.png") });
QMLビューのスナップショットをディスクのどこかに保存したいと考えています。QMLビューのスナップショットを取る
これは可能ですか?
calendar.grabToImage(function(result) { result.saveToFile("something.png") });
はい、それは非常に簡単ですそれ? QQuickWindow
(または類似のクラス)を使用していますか、それを行うにはQQmlApplicationEngine
を使用していますか?など
QQuickWindow
/QQuickView
- それはQQmlApplicationEngine
が含まれているもののQImage
を返すgrabWindow()
機能を持っている - あなたはQQuickWindow
にキャストし、その後、上記のように行うことができるルートオブジェクトを見つける必要があります。
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
// Usually the top level object is your window so you can
// omit the loop below and go straight for
// engine.rootObjects()[0] but it's still wise to check the
// result from the casting
foreach(QObject* obj, engine.rootObjects()) {
QQuickWindow* window = qobject_cast<QQuickWindow*>(obj);
if (window) {
QImage image = window->grabWindow();
qDebug() << image;
}
}
あなたはあなたができるQImage
convert it to QPixmap
を取得し、ファイルとして保存したら。
ビューがあるので、Calendar
と一緒に直接作業することができ、他のオブジェクト間で「検索」する必要はありません。
ここで重要な部分は、あなたのQMLビューの内容ではありませんが、あなたはどのようにロードします。簡単にするために
は、ビューを想定すると、カレンダー
Calendar
{
id: calendar
anchors.fill: parent
}
答えをありがとう。しかし、QQmlApplicationEngineを使用しているので、取得したい項目がルート項目でない場合は、検索する必要があります。 @dtechが提供するソリューションは、QMLの中からすべてを行うことができるため、私の場合は優れています。 –
私はあなたがQMLの中から 'grabImage()'できることを知りませんでした。 – rbaleksandar
QMLのItem::grabToImage()
、またはC++のQQuickItem::grabToImage()
の項目のスナップショットを取ることができます。ウィンドウ全体のスナップショットを撮るためのQQuickWindow::grabImage()
もあります。
完璧に動作します!ありがとう! –