2013-07-11 5 views
0

J'ai une interface utilisateur pour certains logiciels de décryptage qui est invoqué à partir du client de messagerie sur une pièce jointe cryptée.Fermer Feuille avec le signal de C++ dans Blackberry Cascades

Mon objet de décryptage émet un signal à la réussite du décryptage:

emit decryptedChanged(); 

que je passe à travers mon objet contrôleur (joint en _encryptedattachmentencryptedattachment à l'interface utilisateur QML:

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

J'ai Feuille affichée à l'appel sur un fichier chiffré: lorsque l'interface utilisateur est initialisée:

onCreationCompleted: { 
    splashscreen.open(); 
} 

(à la fin de mon TabbedPane, avant que les attachedObjects où la feuille est.)

Je suis en train d'obtenir la feuille de fermer en fonction du signal.

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(); 
      } 
     } 

L'écran de démarrage ne se ferme pas. Je sais que l'objet peut être vu par l'interface utilisateur, car j'utilise d'autres propriétés etc. Ai-je manqué une QPROPERTY ou quelque chose?

Mise à jour:

Ceci est ma définition de signal:

Q_INVOKABLE void decryptedChanged(); 

Mise à jour à nouveau:

J'ai ajouté quelques console.logs au QML:

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

Cela me donne le ouptut suivant:

closing 
connected 

qui est en arrière, et l'écran splash ne se ferme pas.

+0

Il ne semble pas que le code que vous avez lié est responsable de ce qui ne fonctionne pas. Êtes-vous certain que votre signal est émis? – Deadron

+0

Oui, j'ai ajouté une impression de débogage juste avant l'émission, et elle a été imprimée. Cela pourrait-il avoir quelque chose à voir avec l'ordre dans lequel les choses se passent? –

Répondre

1

Le problème est dans cette ligne:

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

les parenthèses après la onDecryptedChanged signifie que cette fonction est appelée, non connecté.

_encryptedattachment.decryptedChanged.connect(splashscreen.onDecryptedChanged); 

fonctionne très bien.

+1

J'ai déjà passé 2 heures à déboguer quelque chose de similaire! – barry

Questions connexes