如何将 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 中的属性 widthheight 的值为 640480。但是每当我启动应用程序时,我的 window 就小得多(是的,我试图给它们不同的值)

问题

程序怎么说:我的主window他应该用main.qml.

如果您使用 QQuickView,那么根必须是 QQuickItem 作为项目、矩形等,因为 QQuickView 是 window.

如果您想要 root Window 或 ApplicationWindow,那么您必须使用 QQmlApplicationEngine。

在您的情况下有 2 个 windows:一个是 QQuickView,另一个是 Window。

考虑到上述情况,您有以下 2 个选择:

  1. 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
}
  1. 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!!!")
}