我知道这不是最好的答案,但我不能写评论(我得到的次数少于 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...
希腊马蒂亚斯