У меня проблема с QTQuick1.1 (QT4.8). У меня есть основной класс, где я экземпляр QMLApplicationViewer, и это показывает окно. Я также вызываю класс, который должен показать другой с другим файлом QML, но он не отображается. Однако сообщения отладки отображаются.
Вот мой код:
AnotherWindow::AnotherWindow(QString notImportant)
{
}
void AnotherWindow::create(){
QmlApplicationViewer view;
qDebug()<<"dbug: CWCReate";
view.addImportPath(QLatin1String("modules"));
view.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
view.setMainQmlFile(QString("instanceOfAnotherWindow.qml"));
view.showExpanded();
qDebug()<<"dbug: show";
}
И в основном
QmlApplicationViewer view;
view.addImportPath(QLatin1String("modules"));
view.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
view.setMainQmlFile(QLatin1String("/main.qml"));
view.setFixedSize(360,600);
AnotherWindow *c = new AnotherWindow("notImportantHere");
c->create();
view.showExpanded();
return app->exec();
}
Заранее спасибо.
Эта строка является проблемой:
QmlApplicationViewer view;
Просто подумайте на секунду, что вы здесь делаете?
Q. Создавать объект, который вы хотите в течение всей жизни вашей программы (надеюсь), внутри функции?
Q. Сколько времени жизни локальной переменной!?
Q. Что происходит с этой переменной при выходе из функции?
Ой, но в основном это работает нормально, что тоже является функцией?
Q. Но тогда каково время жизни основной функции?
Решение : Сделайте этот объект таким, чтобы он был доступен на протяжении всей жизни вашей программы. Как насчет указателя и динамического распределения памяти? Как насчет того, чтобы сделать этот указатель членом данных вашего класса? И main не «выходит» до окончания вашей программы, не так ли?
Других решений пока нет …