Events 当一个屏幕在另一个屏幕上启动时,不会触发Blackberry 10 click事件

Events 当一个屏幕在另一个屏幕上启动时,不会触发Blackberry 10 click事件,events,onclick,qml,blackberry-10,Events,Onclick,Qml,Blackberry 10,当我在第一个单击事件顶部启动第二个屏幕时会发生什么,不会触发。请通过完整的项目链接 正因为如此,我不得不使用NavigationPane。感谢您提供了一个示例,它确实有助于获取测试和复制所需的所有信息 首先,让我解释发生了什么,然后我将解释如何修复它 它不起作用的原因是: 在方法中创建Screen2对象时,该对象将在方法末尾被删除。基本上,你在Screen1上,点击按钮触发你的launchScreen2方法,这个方法创建一个Screen2对象,将新的视觉设置为Screen2.qml,然后在退出之

当我在第一个单击事件顶部启动第二个屏幕时会发生什么,不会触发。请通过完整的项目链接

正因为如此,我不得不使用NavigationPane。

感谢您提供了一个示例,它确实有助于获取测试和复制所需的所有信息

首先,让我解释发生了什么,然后我将解释如何修复它

它不起作用的原因是: 在方法中创建Screen2对象时,该对象将在方法末尾被删除。基本上,你在Screen1上,点击按钮触发你的launchScreen2方法,这个方法创建一个Screen2对象,将新的视觉设置为Screen2.qml,然后在退出之前删除Screen2对象。当您单击Screen2.qml页面上的按钮时,\ u应用程序上下文不再存在

那么为什么它在main.cpp中使用Screen1呢?因为main.cpp将在方法结束之前进入主事件循环,所以在主事件循环完成应用程序退出之前,屏幕1不会被删除

如何修复: 1创建屏幕2作为指针:

虽然这会起作用,但请注意,处理完对象后,您需要负责删除该对象,否则将导致内存泄漏。一个好的做法是尽可能地设置父项,这样您可以确保如果删除父项,所有子项也将被删除

Screen2* screen2 = new Screen2();
当然,虽然设置父对象是一种很好的做法,但更好的做法是在不再需要任何对象时立即删除它们,尽可能降低内存占用

2在Screen1.hpp中将Screen2声明为私有变量,使其成为全局变量

注意,通过这样做,您需要将Screen2构造函数中的代码移动到一个公共方法中,您必须在Screen1::launchScreen2中调用该方法,类似于Screen2.setScene


如果您需要更多信息,请告诉我。

第二屏幕和第三屏幕构造函数中的代码是什么?他们是干什么的?使用共享的代码,单击按钮只是初始化一个变量。我怀疑您试图更改应用程序场景,但如果没有看到代码,我就无法知道。@RogerLeblanc用我解释的话来说,我正在启动应用程序,比如A级场景。现在我要打开另一个属于B类的场景;它的打开,但没有一个具有事件的小部件正在工作。就像在Android中一样,我启动了活动A,从A启动了B,但在B中按钮是不可点击的;在你们的第二个屏幕上?@RogerLeblanc在第二个屏幕上,即使点击{}也不会触发按钮。qml->setContextProperty_应用程序,此;我们使用内部点击{},你能提供一个AI,因为我不能用你提供的极少数代码行来复制你的问题。它真的很棒。Roger Leblanc,它是不可能的。事实上,你对黑莓10有很好的了解。非常感谢您的支持。
Screen2* screen2 = new Screen2();
screen2->setParent(this);