在Blackberry Cascades中使用来自C ++的信号关闭工作表

时间:2013-07-11 15:50:35

标签: c++ qt qml blackberry-cascades

我有一个解密软件的UI,可以通过加密附件从邮件客户端调用。

我的解密对象在成功完成解密后发出信号:

emit decryptedChanged();

我通过我的控制器对象(作为_encryptedattachmentencryptedattachment附加到QML UI:

connect(m_decryptor, SIGNAL(decryptedChanged()), this, SIGNAL(decryptedChanged()));

我有一个Sheet,它在加密文件上调用时显示:初始化UI时:

onCreationCompleted: {
    splashscreen.open();
}

(在我的TabbedPane的末尾,在Sheet所在的attachObjects之前。)

我正在尝试根据信号关闭工作表。

Sheet {
            id: splashscreen
            peekEnabled: false
            Page {

                Container {
                    layout: DockLayout {
                    }
                    ImageView {
                        horizontalAlignment: HorizontalAlignment.Fill
                        verticalAlignment: VerticalAlignment.Fill

                        imageSource: "asset:///images/background.png"
                    }

                    Label {
                        horizontalAlignment: HorizontalAlignment.Fill
                        verticalAlignment: VerticalAlignment.Center
                        text: "Decrypting..."
                        multiline: true
                    }
                }
            }
            onCreationCompleted: {
                _encryptedattachment.decryptedChanged.connect(splashscreen.onDecryptedChanged());
            }
            function onDecryptedChanged () {
                splashscreen.close();
            }
        }

闪屏不会关闭。我知道UI可以看到对象,因为我使用其他属性等。我错过了QPROPERTY或其他什么?

更新

这是我的信号定义:

Q_INVOKABLE void decryptedChanged();

再次更新:

我在QML中添加了一些console.log:

onCreationCompleted: {
    _encryptedattachment.decryptedChanged.connect( splashscreen.onDecryptedChanged() );
    console.log("connected");
}
function onDecryptedChanged() {
    console.log("closing");
    splashscreen.close();
}

这给了我以下ouptut:

closing
connected

向后,并且闪屏不会关闭。

1 个答案:

答案 0 :(得分:1)

问题出在这一行:

 _encryptedattachment.decryptedChanged.connect( splashscreen.onDecryptedChanged() );

onDecryptedChanged之后的括号表示该函数被调用,未连接到。

 _encryptedattachment.decryptedChanged.connect( splashscreen.onDecryptedChanged );

工作正常。