【问题标题】:How to assign QML file to MainWindow/Application如何将 QML 文件分配给 MainWindow/Application
【发布时间】:2019-08-14 09:34:10
【问题描述】:

情况

我在这里有我的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 中的值分配给我的主窗口。

例如: main.qml 中的 widthheight 属性的值分别为 640480。但是每当我启动应用程序时,我的窗口就会小得多(是的,我试图给它们不同的值)

问题

程序怎么说:他应该使用 main.qml 作为我的主窗口。

【问题讨论】:

    标签: c++ qt qml qtquick2


    【解决方案1】:

    如果您使用的是 QQuickView,那么根必须是 QQuickItem,如 Item、Rectangle 等,因为 QQuickView 是一个窗口。

    如果你想根 Window 或 ApplicationWindow 那么你必须使用 QQmlApplicationEngine。

    在您的情况下,有 2 个窗口:一个是 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!!!")
    }
    

    【讨论】:

    • 感谢您的回答,我会接受您的回答,但请您解释一下为什么 qt 无法识别 main.qml。它说“没有这样的文件或目录”
    • @Zer0 如果您使用 QUrl::fromLocalFile() 则预期 main.qml 位于可执行文件旁边,因此如果您不想要,请将 main.qml 复制到构建文件夹中然后创建一个 qresource 并在其中添加 main.qml,然后将 QUrl::fromLocalFile("main.qml") 更改为 QUrl("qrc:/main.qml")
    • @Zer0 通常当你使用 Qt Creator 创建项目时,它已经创建了 .qrc 并使用了 QQmlApplicationEngine,因此如果你不想遇到此类问题,则不应修改它。
    猜你喜欢
    • 2011-09-26
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    相关资源
    最近更新 更多