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 次......)但是使用 PinchArea放大/缩小 qml 很容易,如果你添加一个 MouseArea 你也可以使用 onClicked 或 onDoubleClicked ....这里有一个有用的缩放示例(qt.git)。您发布的 ImageViewer 示例具有打印保存等功能,并且您不想使用“qt Logic”,所以我认为您需要使用“qt Logic”。我会为每个功能编写一个类并在我需要的地方实现它。首先,我认为这可以帮助您(使用 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 回答