私はそれが最良の答えではないことを知っていますが、コメントを書くことはできません(担当者は50人未満です...)が、 onClickedまたはonDoubleClickedを使用できるMouseAreaを追加すると、PinchAreaを使用してqmlのズームイン/ズームアウトが簡単になります....ピンチしてズームするための便利な例があります here(qt.git)。あなたが投稿した ImageViewer の例には、印刷保存などの機能があり、「qt Logic」を使用したくないので、「qt Logic」を使用する必要があると思います。機能ごとに 1 つのクラスを作成し、必要な場所に実装します。まず第一に、これはあなたに役立つと思います(C++を使用したQML機能の拡張)。
ファイルの保存と読み取りの (テストされていない) 例を次に示します。
ファイルio.h
#ifndef FILEIO_H
#define FILEIO_H
#include <QObject>
#include <QVariant>
class FileIO : public QObject
{
Q_OBJECT
public:
Q_PROPERTY(QString source
READ source
WRITE setSource
NOTIFY sourceChanged)
explicit FileIO(QObject *parent = 0);
Q_INVOKABLE QString source();
Q_INVOKABLE QVariant read();
Q_INVOKABLE bool write(const QVariant& data);
public slots:
void setSource(const QString& source) ;
signals:
void sourceChanged(const QString& source);
void error(const QString& msg);
private:
QString mSource;
};
#endif // FILEIO_H
およびfileio.cpp
#include "fileio.h"
#include <QFile>
#include <QDataStream>
#include <QString>
#include <QDebug>
FileIO::FileIO(QObject *parent) :
QObject(parent){
}
QString FileIO::source(){
return mSource;
}
QVariant FileIO::read()
{
if (mSource.isEmpty()){
emit error("source is empty");
return QVariant();
}
QFile file(mSource);
QVariant fileContent; // i dont know if you can use QImage but i think you cann't
if ( file.open(QIODevice::ReadOnly) ) {
QDataStream t( &file );
fileContent << t //you may have to reimplement "<<" operator
file.close();
} else {
emit error("Unable to open the file");
return QVariant();
}
return fileContent;
}.....
それをmain.cppのように登録します
qmlRegisterType<FileIO, 1>("FileIO", 1, 0, "FileIO");
のようにqmlにインポートできます
import FileIO 1.0
Rectangle{
id: someId
...
FileIO{
id: yourAccessToYourFileIOclass
}
}
そのコードはまだテストしていませんが、役に立てば幸いです。
より良い答えを得るには、やりたいことを正確に保存、印刷、任意のフィルターを投稿してください....
psまた、qtでモデルを作成し、それをqmlに持ち込みます...
グリーマティアス