1

QML の Image Element を使用して、画像の拡大/縮小を実装しようとしています。ダブルクリック/ズームをピンチすると、ピクセルスケールが変更されます。

QImage::scaled()、QPixmap::scaled()を使用せずにこれを実装するにはどうすればよいですか。基本的に、アプリケーションに Qt ロジックを組み込みたくありません。

次のチュートリアルhttp://harmattan-dev.nokia.com/docs/library/html/qt4/widgets-imageviewer.htmlで帽子と同様の効果が発生したい

ただし、アプリに Qt Logic はありません。

4

1 に答える 1

1

私はそれが最良の答えではないことを知っていますが、コメントを書くことはできません(担当者は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に持ち込みます...

グリーマティアス

于 2013-08-31T09:23:51.813 に答える