2013-08-06 3 views
1

Я хочу показать страницу всплеска, когда пользователь нажимает на значок приложения. Для этого я создал Лист и прикреплен к странице. main.qmlКак закрыть лист в qml?

import bb.cascades 1.0 

Page { 
    Container { 
     Label { 
      text: "Home page" 
      verticalAlignment: VerticalAlignment.Center 
      horizontalAlignment: HorizontalAlignment.Center 
     } 
    } 
    attachedObjects: [ 
     Sheet { 
      id: mySheet 
      content: Page { 
       Label { 
        text: "Splash Page/Sheet." 
       } 
      } 
     } 
    ]//end of attached objects 
    onCreationCompleted: { 

     //open the sheet 
     mySheet.open(); 

     //After that doing some task here. 
     --------- 
     --------- 
     --------- 

     //Now I'm closing the Sheet. But the Sheet was not closed. 
     //It is showing the Sheet/Splash Page only, not the Home Page 
     mySheet.close(); 
    } 
}//end of page 

После завершения работы, я хочу, чтобы закрыть лист. Поэтому я вызвал метод close(). Но Лист не был закрыт.

Как закрыть лист в oncreationCompleted() или любом методе C++?

+0

Вы пытались поставить журнал до/после '' mySheet.close(); '', просто чтобы убедиться, что вы его достигли? –

+0

Да, я тестировал это, и он также печатает сообщение журнала. – user2636874

+1

Сколько времени занимает ваша задача? Возможно, лист еще не полностью открыт (анимация, возможно, не закончилась), когда вы пытаетесь ее закрыть. –

ответ

1

Вы пытаетесь закрыть Sheet, прежде чем его открытие будет завершено (анимация все еще работает), поэтому запрос закрытия игнорируется им. Вы должны следить за завершением анимации (сигнал opened()), чтобы узнать, открыт ли ваш Sheet. Я бы сделал что-то вроде этого:

import bb.cascades 1.0 

Page { 
    Container { 
     Label { 
      text: "Home page" 
      verticalAlignment: VerticalAlignment.Center 
      horizontalAlignment: HorizontalAlignment.Center 
     } 
    } 
    attachedObjects: [ 
     Sheet { 
      id: mySheet 
      property finished bool: false 
      content: Page { 
       Label { 
        text: "Splash Page/Sheet." 
       } 
      } 
      // We request a close if the task is finished once the opening is complete 
      onOpened: { 
       if (finished) { 
        close(); 
       } 
      } 
     } 
    ]//end of attached objects 
    onCreationCompleted: { 

     //open the sheet 
     mySheet.open(); 

     //After that doing some task here. 
     --------- 
     --------- 
     --------- 

     //Now I'm closing the Sheet. But the Sheet was not closed. 
     //It is showing the Sheet/Splash Page only, not the Home Page 
     mySheet.finished = true; 
     // If the Sheet is opened, we close it 
     if (mySheet.opened) { 
      mySheet.close(); 
     } 
    } 
}//end of page
+0

Позаботьтесь, для некоторых ОС этот сигнал не отправляется. Мне пришлось использовать QTimer и проверить статус «isOpened()», чтобы закрыть его вручную. – Benoit

+0

Вместо того, чтобы закрывать лист непосредственно в методе onOpened(), я попытался, как вы упомянули в коде. Затем лист не закрывается. – user2636874

+0

Добавить console.log ("onOpened"); чтобы этот слот был вызван – Benoit

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