QT QML 无法正确显示

QT QML is not displaying properly

本文关键字:显示 QML QT      更新时间:2023-10-16

我对使用 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();
}

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

为了修复它,我将主要内容更改为:

#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