2013-07-11 4 views
0

У меня есть пользовательский интерфейс для некоторого программного обеспечения для дешифрования, которое вызывается из почтового клиента в зашифрованном приложении.Закрыть лист с сигналом от C++ в Blackberry Cascades

Мой объект дешифрования выдает сигнал об успешном окончании расшифровки:

emit decryptedChanged(); 

, который я пройти через мой объект контроллера (прилагается в качестве _encryptedattachmentencryptedattachment к UI QML:

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

У меня есть Лист, который отображается при вызове в зашифрованном файле: при инициализации пользовательского интерфейса:

onCreationCompleted: { 
    splashscreen.open(); 
} 

(в конце моей панели вкладок, перед прикрепленными объектами, где находится Лист.)

Я пытаюсь закрыть Лист по сигналу.

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

Всплеск не будет закрыт. Я знаю, что объект можно увидеть в пользовательском интерфейсе, поскольку я использую другие свойства и т. Д. Не хватает ли QPROPERTY или что-то еще?

Update:

Это мое определение сигнала:

Q_INVOKABLE void decryptedChanged(); 

Update снова:

Я добавил некоторые console.logs к QML:

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

Это дает мне следующую ouptut:

closing 
connected 

, которая в обратном направлении, и SplashScreen не закрывается.

+0

Не похоже, чтобы какой-либо из кода, который вы связали, несет ответственность за то, что он не работает. Вы уверены, что ваш сигнал испущен? – Deadron

+0

Да, я добавил отладочную печать непосредственно перед выпуском, и она была напечатана. Может ли это иметь какое-то отношение к порядку, в котором все происходит? –

ответ

1

Проблема заключается в этой строке:

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

круглые скобки после onDecryptedChanged означает, что эта функция вызывается, не подключен.

_encryptedattachment.decryptedChanged.connect(splashscreen.onDecryptedChanged); 

работает нормально.

+1

Я однажды провел 2 часа отладки чего-то подобного! – barry

Смежные вопросы