Полноэкранное настольное приложение с QML
У меня есть опыт разработки богатого пользовательского интерфейса с flex и AS3. Однако проблема заключается в том, что очень сложно использовать существующую бизнес-логику С++ с этими гибкими приложениями. С появлением QML мне интересно, можно ли повторно использовать бизнес-логику С++ с QT для приложений с широким пользовательским интерфейсом.
Я хочу знать, можно ли разрабатывать полноэкранные приложения для пользовательского интерфейса (которые становятся все более распространенными, особенно в мобильных устройствах) для рабочего стола. Например (http://blog.flexexamples.com/2007/08/07/creating-full-screen-flex-applications/) Adobe имеет Flash Player, который можно использовать в полноэкранном режиме и запускает контент, написанный в AS3. Можно ли написать похожие приложения с помощью QT/QML?
Ответы
Ответ 1
Если вы хотите использовать бизнес-логику, написанную на С++ и некоторый пользовательский интерфейс 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();
}
Вы можете найти дополнительную информацию здесь.
Ответ 2
Существует также 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 как корневой элемент, а не Rectangle. Для ApplicationWindow вам нужно импортировать QtQuick.Controls.
Ответ 3
При использовании QQmlApplicationEngine в С++ вы можете сделать что-то подобное в 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
Ответ 4
Qt имеет qmlviewer.
Чтобы запустить его в полноэкранном режиме:
$ qmlviewer -fullscreen -frameless file.qml
Также существует учебник по созданию полноэкранных приложений с QML.
И components для виджетов рабочего стола.
Ответ 5
Вот еще одно отличие от предыдущих ответов, но в нем используется тип QML окна (по умолчанию Qt Quick Application - Empty) и перечисление Qt:
import QtQuick 2.6
import QtQuick.Window 2.2
Window {
id: mainWindow
objectName: "mainWindow"
visible: true
flags: Qt.FramelessWindowHint | Qt.Window
color: "black"
visibility: Qt.WindowFullScreen // << the solution
}