2013-07-19 2 views
1

Я пытаюсь реализовать увеличение/уменьшение изображения с помощью Image Element в QML. Я хочу, чтобы масштаб пикселей был изменен, если я дважды щелкаю/щепотку зума.zoom Элемент изображения в QML. без использования QImage :: scaled(), QPixmap :: scaled().

Как я могу реализовать это без использования QImage :: scaled(), QPixmap :: scaled(). В принципе, я не хочу включать Qt-логику в свое приложение.

Я хочу Подобный эффект шляпы происходит в следующем учебном пособии http://harmattan-dev.nokia.com/docs/library/html/qt4/widgets-imageviewer.html

Но без Qt логики в приложении.

ответ

1

Я знаю, что это не лучший ответ, но я не могу написать комментарий (я получил менее 50 повторений ...), но масштабирование в/из qml легко с помощью PinchArea, если вы добавите MouseArea, вы также можете использовать 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; 
}..... 

и зарегистрировать, что в главной .cpp, например

qmlRegisterType<FileIO, 1>("FileIO", 1, 0, "FileIO"); 

so yo u может импортировать его в ваш qml как

import FileIO 1.0 
Rectangle{ 
id: someId 
... 
FileIO{ 
id: yourAccessToYourFileIOclass 
} 
} 

Я еще не тестировал этот код, надеюсь, это поможет.

для лучшего ответа после того, что вы хотите сделать exacly сохранять, печатать, любые фильтры ....

P.S. Я также создаю модель в qt и приведу ее в qml ...

greez Matthias