Полноэкранные приложения с QML
У меня есть опыт разработки богатых приложений пользовательского интерфейса с flex и AS3. Однако проблема заключается в том, что очень сложно использовать существующую бизнес-логику c++ с этими приложениями flex. С появлением QML мне интересно, можно ли повторно использовать бизнес-логику c++ с QT для богатых приложений UI.
Я хочу знать, можно ли разрабатывать полноэкранные приложения с богатым пользовательским интерфейсом(которые становятся все более распространенными, особенно на мобильных устройствах) для рабочий стол. Для example(http://blog.flexexamples.com/2007/08/07/creating-full-screen-flex-applications/) Adobe имеет Flash Player, который может использоваться в полноэкранном режиме и запускает контент, написанный на AS3. Можно ли писать подобные приложения с помощью QT / QML?
4 ответов
Если вы хотите использовать бизнес-логику, написанную на C++ , и некоторый пользовательский интерфейс QML, вы можете использовать QDeclarativeView
внутри вашего приложения. Это просто обычный виджет Qt, поэтому у него есть метод showFullScreen()
. На самом деле этот класс похож на "qmlviewer внутри вашего приложения".
Так вы получите что-то вроде этого:
#include <QtGui/QApplication>
#include <QtDeclarative/QDeclarativeView>
#include <QtCore/QUrl>
int main(int _argc, char * _argv[])
{
QApplication app(_argc, _argv);
QDeclarativeView view;
view.setSource(QUrl("qrc:/MyGui.qml")); // if your QML files are inside
// application resources
view.showFullScreen(); // here we show our view in fullscreen
return app.exec();
}
вы можете найти более подробную информацию здесь.
существует также QML-единственный способ перейти в полноэкранный режим. Вы можете использовать это, если вы не используете QDeclarativeView, но QQmlApplicationEngine, так как последний не наследует QWidget и не имеет метода showFullScreen().
import QtQuick 2.2
import QtQuick.Controls 1.1
ApplicationWindow {
id: window
visible: true
visibility: "FullScreen"
width: 640
height: 480
Button {
text: "exit fullscreen"
onClicked: window.visibility = "Windowed"
}
}
но важно использовать ApplicationWindow в качестве корневого элемента, а не прямоугольник. Для ApplicationWindow вы должны импортировать QtQuick.Контроли.
при использовании QQmlApplicationEngine в C++ вы можете сделать что-то вроде этого в QML:
main.cpp
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
main.в QML
import QtQuick 2.7
import QtQuick.Window 2.2
Window {
id: mainWindow
Component.onCompleted: {
mainWindow.showFullScreen();
}
}
испытано с QT5.8
в Qt есть qmlviewer.
чтобы запустить его в полноэкранном режиме:
$ qmlviewer -fullscreen -frameless file.qml
и есть учебник создания полноэкранных приложений с QML. И компоненты для виджетов рабочего стола.