Blackberry 10 BBOS 10文件选择器未正确返回信号

Blackberry 10 BBOS 10文件选择器未正确返回信号,blackberry-10,Blackberry 10,我在BlackBerry 10上实现了一个本机文件选择器,经过一番混乱之后,它终于识别出了这个类,它打开得很好,并在控制台上返回了文件地址,但看起来有两个信号工作不正常,请注意,这几乎是BlackBerry 10文档中的代码的直接副本 using namespace bb::cascades::pickers; void Utils::getFile() const{ FilePicker* filePicker = new FilePicker(); filePic

我在BlackBerry 10上实现了一个本机文件选择器,经过一番混乱之后,它终于识别出了这个类,它打开得很好,并在控制台上返回了文件地址,但看起来有两个信号工作不正常,请注意,这几乎是BlackBerry 10文档中的代码的直接副本

    using namespace bb::cascades::pickers;
void Utils::getFile() const{

     FilePicker* filePicker = new FilePicker();
    filePicker->setType(FileType::Music);
    filePicker->setTitle("Select Sound");
    filePicker->setMode(FilePickerMode::Picker);
    filePicker->open();

    // Connect the fileSelected() signal with the slot.
    QObject::connect(filePicker,
        SIGNAL(fileSelected(const QStringList&)),
        this,
        SLOT(onFileSelected(const QStringList&)));

    // Connect the canceled() signal with the slot.
    QObject::connect(filePicker,
        SIGNAL(canceled()),
        this,
        SLOT(onCanceled()));
}
我想让它将文件url返回给qml,并使用此选项(QFileDialog可以正常工作,但在我的SDK上无法识别)
var test=utils.getFile()
if(test==“”)console.debug(“空”)
else控制台。调试(测试)

但是我从控制台得到这些消息:
Object::connect:No这样的插槽Utils::onfleselected(const QStringList&)in../src/Utils.cpp:27
Object::connect:在../src/Utils.cpp:33中没有这样的插槽Utils::onCanceled()

当它打开时,从qml函数中的else返回undefined,
有人知道我在哪里出错,或者我如何让SDK找到QFileDialog类吗?

我只是想给你一点解释,以防你仍然遇到一些问题。Qt中的概念对我来说也有点陌生

有几种方法可以做到这一点。最简单的可能是纯QML路线:

import bb.cascades 1.2
import bb.cascades.pickers 1.0

Page {
    attachedObjects: [
        FilePicker {
            id: filePicker
            type: FileType.Other
            onFileSelected: {
                console.log("selected files: " + selectedFiles)
            }
        }
    ]

    Container {
        layout: DockLayout {

        }
        Button {
            id: launchFilePicker
            text: qsTr("Open FilePicker")
            onClicked: {
                filePicker.open();
            }
        }
    }
}
当您单击
launchFilePicker
按钮时,它将调用。选择文件后,将触发
fileSelected
信号。本例中的
插槽是
onFileSelected
功能(预定义),它将所选文件(信号中的参数)的文件路径记录到控制台


< > C++路由有点多,但还是可行的。 如果您的类文件名为
Util
,那么您的
Util.h
如下所示:

#ifndef UTIL_H_
#define UTIL_H_

#include <QObject>

class QStringList;

class Util : public QObject
{
    Q_OBJECT
public:
    Util(QObject *parent = 0);

    Q_INVOKABLE
    void getFile() const;

private Q_SLOTS:
    void onFileSelected(const QStringList&);
    void onCanceled();
};

#endif /* UTIL_H_ */
要使Q_可调用
getFile()
方法可供QML使用,您需要创建一个实例并将其设置为ContextProperty。我在我的
应用程序I.cpp中这样做,如下所示:

Util *util = new Util(app);
QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
qml->setContextProperty("_util", util);
然后,您可以从QML调用此Q_INVOKABLE
getFile()
方法:

Page {
    Container {
        layout: DockLayout {}
        Button {
            id: launchFilePicker
            text: qsTr("Open FilePicker")
            onClicked: {
                _util.getFile();
            }
        }
    }
}

正如Richard所说,大多数文档都介绍了如何创建信号/插槽,因此您可以查看这些内容,但也可以查看一些


希望有帮助

您是否已在
Utils.h
中将
onFileSelected()
声明为插槽,并将
Q\u INVOKABLE
添加到
getFile()
方法中?另外,您的
getFile()
没有返回任何内容,这就是您想要做的吗?我只有Q_可调用的void getFile()常量;Blackberry页面上没有提到必须声明onFileSelected:getFile只是我用来打开选择器的函数,我认为我做得不对,我只是想让它返回我选择的文件的url,所有插槽必须在类头文件中声明为这样。类定义还必须包含宏Q_对象,以便由为您执行大部分信号槽工作的MOC编译器处理该类。这些概念在教程文档和Qt网站的早期介绍。之后,许多细节被排除在外。李察,谢谢,我不使用SquldQML组件,因为我不喜欢它没有锚定UI的方法,我有一个习惯,我会尝试C++方法,认为我已经开始掌握这只百灵鸟的窍门。
Page {
    Container {
        layout: DockLayout {}
        Button {
            id: launchFilePicker
            text: qsTr("Open FilePicker")
            onClicked: {
                _util.getFile();
            }
        }
    }
}