如何将 QML 文件分配给 MainWindow/Application
How to assign QML file to MainWindow/Application
情况
我的main.cpp
在这里
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickView>
#include <QQmlContext>
#include "root.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickView view;
testApp::Root data;
view.rootContext()->setContextProperty("dataContext", &data);
view.setSource(QUrl::fromLocalFile("main.qml"));
view.show();
return app.exec();
}
还有我的main.qml
这里
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World!!!")
}
问题
每当我启动我的应用程序时,它不会将 main.qml
中的值分配给我的主程序 window。
例如:
main.qml 中的属性 width、height 的值为 640、480。但是每当我启动应用程序时,我的 window 就小得多(是的,我试图给它们不同的值)
问题
程序怎么说:我的主window他应该用main.qml.
如果您使用 QQuickView,那么根必须是 QQuickItem 作为项目、矩形等,因为 QQuickView 是 window.
如果您想要 root Window 或 ApplicationWindow,那么您必须使用 QQmlApplicationEngine。
在您的情况下有 2 个 windows:一个是 QQuickView,另一个是 Window。
考虑到上述情况,您有以下 2 个选择:
- QQuickView
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickView view;
testApp::Root data;
view.view.setResizeMode(QQuickView::SizeRootObjectToView);
view.rootContext()->setContextProperty("dataContext", &data);
view.setSource(QUrl::fromLocalFile("main.qml"));
view.setTitle("Hello World!!!")
view.show();
return app.exec();
}
import QtQuick 2.12
import QtQuick.Window 2.12
Item {
width: 640
height: 480
}
- QQmlApplicationEngine
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
testApp::Root data;
engine.rootContext()->setContextProperty("dataContext", &data);
engine.load(QUrl::fromLocalFile("main.qml"));
return app.exec();
}
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World!!!")
}
情况
我的main.cpp
在这里
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickView>
#include <QQmlContext>
#include "root.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickView view;
testApp::Root data;
view.rootContext()->setContextProperty("dataContext", &data);
view.setSource(QUrl::fromLocalFile("main.qml"));
view.show();
return app.exec();
}
还有我的main.qml
这里
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World!!!")
}
问题
每当我启动我的应用程序时,它不会将 main.qml
中的值分配给我的主程序 window。
例如: main.qml 中的属性 width、height 的值为 640、480。但是每当我启动应用程序时,我的 window 就小得多(是的,我试图给它们不同的值)
问题
程序怎么说:我的主window他应该用main.qml.
如果您使用 QQuickView,那么根必须是 QQuickItem 作为项目、矩形等,因为 QQuickView 是 window.
如果您想要 root Window 或 ApplicationWindow,那么您必须使用 QQmlApplicationEngine。
在您的情况下有 2 个 windows:一个是 QQuickView,另一个是 Window。
考虑到上述情况,您有以下 2 个选择:
- QQuickView
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickView view;
testApp::Root data;
view.view.setResizeMode(QQuickView::SizeRootObjectToView);
view.rootContext()->setContextProperty("dataContext", &data);
view.setSource(QUrl::fromLocalFile("main.qml"));
view.setTitle("Hello World!!!")
view.show();
return app.exec();
}
import QtQuick 2.12
import QtQuick.Window 2.12
Item {
width: 640
height: 480
}
- QQmlApplicationEngine
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
testApp::Root data;
engine.rootContext()->setContextProperty("dataContext", &data);
engine.load(QUrl::fromLocalFile("main.qml"));
return app.exec();
}
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World!!!")
}