Я работаю над мобильным приложением Qt для платформы symbian. У меня есть функция, которая изменяет текущий отображаемый экран, эта функция является слотом и поэтому может вызываться со стороны C ++ и из QML.
public slots:
void ChangeView(const QString & viewPath);
void Controller::ChangeView(const QString & viewPath) {
if(this->view->status() == QDeclarativeView::Ready) {
QDeclarativeProperty * property = new QDeclarativeProperty(this->view,"source", this->context);
if(property->isValid()) {
property->write(QVariant(viewPath));
property->~QDeclarativeProperty();
}
}
else if(this->view->status() == QDeclarativeView::Error) {
QList<QDeclarativeError> errors = this->view->errors();
for(int i = 0; i < errors.size(); ++i) {
qDebug() << "Error: " << errors.at(i);
}
errors.~QList();
}
}
Вызов этой функции из C ++ работает просто отлично,
void Controller::Show() {
this->window->setCentralWidget(this->view);
this->menu->MainMenu();
this->ChangeView("qml/Streemio/Login.qml");
this->window->show();
}
однако приложение вылетает, когда я вызываю его из QML.
Button {
id: channels
anchors.top: nowPlaying.bottom
anchors.topMargin: -1
label: "Channels"
subLabel: "listen to default playlists"
imgSource: "qrc:Streemio/img/channel_menu.png"
fontSize: 14
subFontSize: 7
buttonWidth: container.width
Keys.onSelectPressed: {controller.ChangeView("qml/Streemio/Channels.qml")}
Keys.onDownPressed: {search.focus = true; flickArea.contentY = 75}
Keys.onUpPressed: {nowPlaying.focus = true; flickArea.contentY = 0}
}
Вот вывод приложения.
Starting application...
Application running with pid 770.
CAknSignalDataObserver::HandleUpdateL: UMA
CAknSignalPane::ShowUmaIconL: begin
CAknSignalPane::LoadSignalIconL: uma-off
CAknSignalPane::ShowUmaIconL: end
[Qt Message] QNetworkReplyImpl::_q_startOperation was called more than once
Process 770, thread 771 stopped at 0x71547a2a: A data abort exception has occurred.
Finished.
Что я здесь не так делаю? Спасибо.