Как отреагировать на фотосохраненный сигнал в Blackberry Cascades

Итак, я использую Blackberry 10 Cascades (QT, QML, C ++) и пытаюсь обработать фотографии, сделанные камерой. Я изучал, как сделать это в Интернете, и выяснил некоторые вещи, но это еще не работает. Вот что я сделал (я выделил наиболее важные части кода с помощью // ————— СООТВЕТСТВУЮЩЕЙ ЛИНИИ КОДА КОДА —— —————————- начать и
// ———————————————— ———————— для завершения соответствующих разделов.

//Camera.h

#ifndef CAMERA_H_
#define CAMERA_H_

#include <QObject>
#include <Page.h>namespace bb {
namespace cascades {
class Container;
namespace multimedia {
class Camera;
}
}
}

namespace GDLiteBB {

class Camera : public QObject, public Page_ {
Q_OBJECT

//-----------------RELEVANT LINE OF CODE---------------------
bb::cascades::multimedia::Camera *cameraDevice_;
//-----------------------------------------------------------

static Camera *Camera_;

Camera(
QString *qmlFileName = new QString(""),
QString *qmlVarName = new QString(""),
QObject *parent = 0);

public:

static Camera *getInstance(
QString *qmlFileName = new QString("main.qml"),
QString *qmlVarName = new QString("camera"),
QObject *parent = 0);

virtual ~Camera();

Camera *show(bb::cascades::Container *container = 0);

void showCamera();

//-----------------RELEVANT LINES OF CODE---------------------
public slots:
void onPhotoSaved(const QString &fileName, quint64 length);
//-------------------------------------------------------------
};

} /* namespace GDLiteBB */

#endif /* CAMERA_H_ */

//Camera.cpp

Camera::Camera(
QString *qmlFileName,
QString *qmlVarName,
QObject *parent)
: QObject(parent),
Page_(qmlFileName, qmlVarName)
{
INIT_PAGE

if (Root_) {
//-----------------RELEVANT LINES OF CODE---------------------
cameraDevice_ =
Root_->findChild<bb::cascades::multimedia::Camera *>("camera1");

connect(cameraDevice_, SIGNAL(photoSaved(const QString&, quint64)), this,
SLOT(onPhotoSaved(const QString&, quint64)));
//----------------------------------------------------------------

} else {
cameraDevice_ = 0;
}
}

//-----------------RELEVANT LINES OF CODE---------------------
void Camera::onPhotoSaved(
const QString &fileName,
quint64 length)
{
disconnect(
cameraDevice_,
SIGNAL(photoSaved(const QString&, quint64)),
this,
SLOT(onPhotoSaved(const QString&, quint64)));

qDebug() << "onPhotoSaved";
qDebug() << "filename is " << fileName << ", length is " << length << "test";
}
//-----------------------------------------------------------------

Но когда я делаю снимок, слот onPhotoSaved не запускается, поскольку qDebug не происходит.

Я знаю, что фотография сохраняется, потому что в qml у меня есть:

Label {
id: cameraDebug
}
Camera {
...
onPhotoSaved: {
photoBeingTaken = false;
cameraDebug.text = "saved photo"}
}

и после фотографирования метка cameraDebug изменится на «сохраненную фотографию», поэтому я ловлю сигнал QML для сохраненной фотографии, но мне нужно поймать сигнал C ++ для сохраненной фотографии, поскольку мне нужно имя файла фотографии и это не работает, как я сказал выше.

0

Решение

Я понял проблему. Линия:

cameraDevice_ = Root_->findChild<bb::cascades::multimedia::Camera *>("camera1");

был нулевым, потому что в коде qml не было фактического «objectName: camera1», был только «id: camera1», поэтому не было никакого способа подключить cameraDevice_ к слоту onPhotoSaved, так как он был нулевым.

Это была глупая ошибка, но я надеюсь, что этот вопрос и ответ пойдут на пользу другим, кто хочет выяснить, как обрабатывать сохраненную фотографию в каскадах ежевики, или просто обрабатывать сигналы и слоты в целом в QT, или как-то иначе это может помочь их.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector