QML简单程序未运行

时间:2018-09-07 00:49:28

标签: qt qml qt5 qtquick2

我正在尝试运行以下内容,但运行时什么也没有发生。 我该如何调试此类问题?

import QtQuick 2.0
import QtQml.Models 2.1



Item{
    id: main
    width: 1500
    height: 1500
    GridView {
        id: root
        width: 1500
        height: 1500
        cellWidth: 200; cellHeight: 200
        visible: true


        model: DelegateModel {
            model: ListModel {
                ListElement {
                    color: "blue"
                }
                ListElement {
                    color: "white"
                }
                ListElement {
                    color: "red"
                }
                ListElement {
                    color: "green"
                }
                ListElement {
                    color: "orange"
                }
                ListElement {
                    color: "yellow"
                }
                ListElement {
                    color: "grey"
                }
            }

            delegate: MouseArea {
                objectName: "mousearea"

                implicitHeight: parent.height
                implicitWidth: parent.width

                Rectangle {
                    anchors.fill: parent
                    color: model.color
                }
                drag{
                    target: parent
                }
            }
        }
    }
}

我从这段代码中打算得到的是以下内容: 在GridView内创建几个矩形,并向其中添加MouseArea,然后尝试将其拖动。我不确定我的模型结构在这里是否正确。

编辑: 添加main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

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

    return app.exec();
}

1 个答案:

答案 0 :(得分:1)

QQmlApplicationEngine期望以docs所示的窗口作为根元素:

  

...
  与QQuickView不同,QQmlApplicationEngine不会自动创建   根窗口。如果您使用的是Qt Quick中的可视项,您将   需要将它们放置在Window内。   
...

因此解决方案很简单,请按窗口更改项目:

main.qml

import QtQuick 2.0
import QtQuick.Window 2.11
import QtQml.Models 2.1

Window{
    visible: true
    id: main
    width: 1500
    height: 1500
    GridView {
        id: root
        width: 1500
        height: 1500
        cellWidth: 200; cellHeight: 200
        visible: true


        model: DelegateModel {
            model: ListModel {
                ListElement {
                    color: "blue"
                }
                ListElement {
                    color: "white"
                }
                ListElement {
                    color: "red"
                }
                ListElement {
                    color: "green"
                }
                ListElement {
                    color: "orange"
                }
                ListElement {
                    color: "yellow"
                }
                ListElement {
                    color: "grey"
                }
            }

            delegate: MouseArea {
                objectName: "mousearea"

                implicitHeight: parent.height
                implicitWidth: parent.width

                Rectangle {
                    anchors.fill: parent
                    color: model.color
                }
                drag{
                    target: parent
                }
            }
        }
    }
}