iOS和Android中的照片库

时间:2015-10-30 18:58:13

标签: qt qml photo-gallery

我正在开发一个移动应用,以便在iOSAndroid中投放,我在使用image gallery访问Qml设备时遇到了一些困难。

我需要在GridView中列出图片库中的图片。

我尝试使用QStandardPaths返回图片文件夹,但它只适用于台式计算机。对于运行iOSAndroid的智能手机,它会返回一个不是图库文件夹的文件夹。

有人可以帮我弄明白我该怎么做吗?我的代码如下:

的main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

#include <QtQml>

#include "caminhoimagens.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    qmlRegisterType<caminhoImagens>("PathImagens", 1, 0, "CaminhoImagens");

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

main.qml

import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Controls 1.3
import QtQuick.Dialogs 1.2

import Qt.labs.folderlistmodel 2.1

import PathImagens 1.0

Window {
    visible: true

    width: 360
    height: 640

    maximumHeight: 640
    minimumHeight: 640

    maximumWidth: 360
    minimumWidth: 360

    title: "Acessar Galeria Test"

    Rectangle {
        id: principal

        anchors.fill: parent

        ListModel {
            id: listModel
        }

        FolderListModel {
            id: folderListModel

            folder: "file://" + caminhoImagens.retornaCaminhoImagens()
            nameFilters: "*.jpeg"
        }

        CaminhoImagens {
            id: caminhoImagens
        }

        Item {
            id: listaFotosDelegate

            property Component delegateComponent: listaFotosDelegateComponent

            Component {
                id: listaFotosDelegateComponent

                Image {
                    id: imagem

                    source: folderListModel.folder + "/" + fileName

                    width: principal.width / 4.2
                    height: principal.width / 4.2

                    fillMode: Image.PreserveAspectCrop
                }
            }
        }

        GridView {
            id: listaFotosGridView

            anchors.fill: parent

            clip: true

            model: folderListModel

            delegate: listaFotosDelegate.delegateComponent

            cellWidth: parent.width / 4
            cellHeight: parent.width / 4
        }
    }
}

caminhoimagens.h

#ifndef CAMINHOIMAGENS_H
#define CAMINHOIMAGENS_H

#include <QObject>
#include <QStandardPaths>

class caminhoImagens : public QObject
{
    Q_OBJECT

public slots:
    QString retornaCaminhoImagens();

public:
    caminhoImagens();
};

#endif // CAMINHOIMAGENS_H

caminhoimagens.cpp

#include "caminhoimagens.h"

caminhoImagens::caminhoImagens()
{

}

QString caminhoImagens::retornaCaminhoImagens()
{
    return QStandardPaths::locate(QStandardPaths::PicturesLocation, QString(), QStandardPaths::LocateDirectory);
}

1 个答案:

答案 0 :(得分:3)

回答我自己的问题。

在iOS中

只需在<?php if ($PageType == 'about'){ ?> <img src='http://test.com/images/img.png' alt='' title='' class='img' /> <?php include('../include-images.html'); ?> <a href='#'><img src='test.com/images/one.jpg' alt='' title='' class='img' /></a> <br class='brclear'/> <?php } ?> 内创建FileDialog并设置QML file。它会调用iOS画廊。

在Android中,一旦需要集成java代码,这将是一项艰巨的任务。

我在Qt中使用folder: shortcuts.pictures编写了一个等效的java代码。

caminhoimagens.h

QAndroidJniObject

caminhoimagens.cpp

#ifndef CAMINHOIMAGENS_H
#define CAMINHOIMAGENS_H

#include <QObject>

#include "imagepickerandroid.h"

#include <QDebug>

class caminhoImagens : public QObject
{
    Q_OBJECT

    Q_PROPERTY(QString imagemCaminho READ imagemCaminho NOTIFY imagemCaminhoChanged)

public slots:
    void buscaImagem();
    void retornaImagem(QString path);

public:
    caminhoImagens();

    QString imagemCaminho();

private:
    QString m_imagemCaminho = "";

signals:
    void imagemCaminhoChanged();
};

#endif //CAMINHOIMAGENS_H

imagepickerandroid.h

#include "caminhoimagens.h"

caminhoImagens::caminhoImagens()
{

}

void caminhoImagens::buscaImagem()
{
    imagePickerAndroid *imagePicker = new imagePickerAndroid();
    connect(imagePicker, SIGNAL(imagemCaminhoSignal(QString)), this, SLOT(retornaImagem(QString)));

    imagePicker->buscaImagem();
}

void caminhoImagens::retornaImagem(QString path)
{
    qDebug() << path;

    m_imagemCaminho = path;

    emit imagemCaminhoChanged();
}

QString caminhoImagens::imagemCaminho()
{
    return m_imagemCaminho;
}

imagepickerandroid.cpp

#ifndef IMAGEPICKERANDROID_H
#define IMAGEPICKERANDROID_H


#include <QObject>
#include <QtAndroidExtras>

#include <QDebug>

class imagePickerAndroid : public QObject, public QAndroidActivityResultReceiver
{
    Q_OBJECT

public:
    imagePickerAndroid();

    void buscaImagem();

    virtual void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject & data);

signals:
    void imagemCaminhoSignal(QString);
};

#endif // IMAGEPICKERANDROID_H