在QML中缩放图像元素。不使用QImage :: scaled(),QPixmap :: scaled()。

时间:2013-07-19 06:58:33

标签: image qt qml

我正在尝试使用QML中的图像元素实现图像的放大/缩小。 如果我双击/捏缩放,我希望修改像素比例。

如何在不使用QImage :: scaled(),QPixmap :: scaled()的情况下实现此功能。 基本上我不想让Qt逻辑涉及我的应用程序。

我想在下面的教程中发生类似于帽子的效果 http://harmattan-dev.nokia.com/docs/library/html/qt4/widgets-imageviewer.html

但是在应用程序中没有Qt Logic。

1 个答案:

答案 0 :(得分:1)

我知道这不是最好的答案,但我不能写评论(我的代表少于50次......)但是如果你添加一个MouseArea你也可以使用PinchArea轻松放大/缩小qml onClicked或onDoubleClicked ....有一个缩放缩放here(qt.git)的有用示例。 您发布的ImageViewer示例具有打印保存等功能,您不想使用“qt Logic”,因此我认为您需要使用“qt Logic”。我会为每个功能创建一个类,并在需要它的地方实现它。 首先i think this could help you(Extending QML Functionalities using C++). 这是一个用于保存和读取文件的(未测试)示例:

fileio.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
}
}

我尚未测试该代码,我希望它有所帮助。

为了更好的答案,发布您想要做的事情,保存,打印,任何过滤器....

P.S。我还会在qt中创建一个模型并将其带到qml ...

greez Matthias