我正在尝试使用QML中的图像元素实现图像的放大/缩小。 如果我双击/捏缩放,我希望修改像素比例。
如何在不使用QImage :: scaled(),QPixmap :: scaled()的情况下实现此功能。 基本上我不想让Qt逻辑涉及我的应用程序。
我想在下面的教程中发生类似于帽子的效果 http://harmattan-dev.nokia.com/docs/library/html/qt4/widgets-imageviewer.html
但是在应用程序中没有Qt Logic。
答案 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