我正在制作一个带有QML / c ++第一页的应用程序,导航窗格是用qml创建的。 然后第二页也是qml。 在按下第一页的按钮时,调用c ++函数并解析第二页并且必须推送到导航页面。 我在按钮按下时所做的事情如下所述。
QmlDocument *qml = QmlDocument::create("asset:///home.qml");
if (!qml->hasErrors()) {
Page *homepage = qml->createRootObject<Page>();
if (homepage) {
qDebug() <<"created a homepage";
navPane->push(homepage);
}}
但是当完成推送时,应用程序会自动终止并发出错误。
控制台输出是(创建了一个主页
过程304619722(Sampleapp2)终止SIGSEGV代码= 1 fltno = 11 ip = 78f0a210(/base/usr/lib/libbbcascades.so.1@_ZNK2bb8cascades14NavigationPane7indexOfEPNS0_4PageE+0x707)mapaddr = 0010a210。 REF = 00000010 )
我正在解析指向第二个c ++文件构造函数的导航页面指针,并将其指定给this-&gt; navpange变量。
我应该在第一个c ++文件头中公开导航窗格吗?如果是这样怎么办?
无论如何,我可以从第二个c ++文件获取正在运行的应用程序的活动导航窗格而不进行解析吗?
提前致谢: - )
我是否必须进行导航
答案 0 :(得分:0)
根据给出的代码,我假设主页未初始化。
答案 1 :(得分:0)
来自黑莓论坛的Zemy回答了我。归功于他。
我认为最简单的方法是将NavigationPane作为QML中的参数传递:
Q_INVOKABLE void function(NavigationPane *pane);
...
pane->push(homepage);
在QML中:
_app.function(navPaneId)
但是这出错了。泽米再次修好了它。
我试图重现这个并且也得到了相同的错误消息。似乎NavigationPane未在Cascades中正确注册。
添加qmlRegisterType()修复它:
ApplicationUI::ApplicationUI(bb::cascades::Application *app) :
QObject(app)
{
// prepare the localization
m_pTranslator = new QTranslator(this);
m_pLocaleHandler = new LocaleHandler(this);
if(!QObject::connect(m_pLocaleHandler, SIGNAL(systemLanguageChanged()), this, SLOT(onSystemLanguageChanged()))) {
// This is an abnormal situation! Something went wrong!
// Add own code to recover here
qWarning() << "Recovering from a failed connect()";
}
// initial load
onSystemLanguageChanged();
//--------------------------------------
qmlRegisterType<NavigationPane>(); <---------------- ADDED
//--------------------------------------
// Create scene document from main.qml asset, the parent is set
// to ensure the document gets destroyed properly at shut down.
QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
qml->setContextProperty("_app", this);
// Create root object for the UI
AbstractPane *root = qml->createRootObject<AbstractPane>();
// Set created root object as the application scene
app->setScene(root);
}