首页 > 解决方案 > QT QML 无法正确显示

问题描述

我对使用 QT 很陌生,并且在显示我在 .qml 文件中创建的应用程序窗口时遇到了问题。我使用来自 QT youtube 频道的教程作为起点。当我运行应用程序时,屏幕上确实出现了一个窗口,但是,它不是指定的尺寸,也没有反映 qml 中写入的内容(基于教程的结果)。我正在使用带有 QT 插件的 VS2017,并且有按钮和窗口可以使用 .ui 文件显示。我在这里的实施做错了什么?

qml:

import QtQuick 2.9
import QtQuick.Controls 2.3
import QtPositioning 5.12
import QtLocation 5.12
import QtQuick.Layouts 1.3
import QtQuick.Window 2.2

ApplicationWindow
{
    id: root
    width : 700
    height : 700
    visible : true
    title: qsTr("Hello World")

Action
{
    id: actionNew
    text: qsTr("&New")
    shortcut: StandardKey.New
    icon.name: "document-new"
    onTriggered: area.placeholderText = "To do = New"
}

Action
{
    id: actionOpen
    text: qsTr("&Open")
    shortcut: StandardKey.Open
    icon.name: "document-Open"
    onTriggered: area.placeholderText = "To do - Open"
}

    Action
{
    id: actionSave
    text: qsTr("&Save")
    shortcut: StandardKey.Save
    icon.name: "document-Save"
    onTriggered: area.placeholderText = "To do - Save"
}

menuBar: MenuBar
{
    Menu 
    {
        title: "File"
        MenuItem {action: actionNew}
        MenuItem {action: actionOpen}
        MenuItem {action: actionSave}
    }
}

header: ToolBar
{
    RowLayout
    {
        ToolButton {action: actionNew}
        ToolButton {action: actionOpen}
        ToolButton {action: actionSave}
    }
}

TextArea
{
    id: area
    anchors.fill: parent
}
}

主.cpp:

#include <QtQuick/QQuickView>
#include <QtQuick/QQuickItem>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QQuickView views;
    views.setSource(QUrl(QStringLiteral("qrc:/QTKM/main.qml")));
    views.show();


    return a.exec();
}

标签: c++qtvisual-studio-2017qml

解决方案


测试您的代码我看到出现了第二个空白窗口。

为了解决这个问题,我将主要内容更改为:

#include <QApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

使用QQmlApplicationEngine而不是QQuickView.


推荐阅读