我有一个解密软件的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
向后,并且闪屏不会关闭。
答案 0 :(得分:1)
问题出在这一行:
_encryptedattachment.decryptedChanged.connect( splashscreen.onDecryptedChanged() );
onDecryptedChanged之后的括号表示该函数被调用,未连接到。
_encryptedattachment.decryptedChanged.connect( splashscreen.onDecryptedChanged );
工作正常。