首页 > 解决方案 > 使用 C++ 模型时,如何在 qml ListView 中使用另一个 qml 文件作为委托?

问题描述

我想将 ListView 与来自另一个 qml 文件的委托一起使用。使用 qml 模型有效,但现在我使用的是 C++ 模型,并且仅当在视图的同一 qml 文件上声明委托时才有效。

main.qml

import QtQuick 2.11
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.4
import QtQuick.Layouts 1.11
import QtQuick.Window 2.11

Rectangle {
    id: window
    width: 400
    height: 500

    ListView {
        id: myListView
        anchors.fill: parent
        model: myModel
        delegate: MyDelegate {}
    }
}

MyDelegate.qml

import QtQuick 2.12
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.4
import QtQuick.Layouts 1.11
import QtQuick.Window 2.11

ItemDelegate{
    id: myDelegate
    width: parent.width
    height: 50
    Rectangle{
        width: parent.width
        height: parent.height
        color: "gray"
    }
}

主文件

#include <QtQuick/qquickitem.h>
#include <QtQuick/qquickview.h>

int main(int argc, char ** argv)
{
    QGuiApplication app(argc, argv);

    ElementModel model;
    model.addElement(Element("first");
    model.addElement(Element("second");

    QQuickView view;
    view.setResizeMode(QQuickView::SizeRootObjectToView);
    QQmlContext *ctxt = view.rootContext();
    ctxt->setContextProperty("myModel", &model);

    view.setSource(QUrl("qrc:main.qml"));
    view.show();

    return app.exec();
}

我尝试import "MyDelegate.qml" as MyDelegate在 main.qml 中使用,但它不起作用。我该怎么做?

谢谢!

[解决了]

view.setSource需要像这样调用该方法来检测其他 qml 文件:

view.setSource(QUrl("qrc:/main.qml"));

标签: c++qtqml

解决方案


推荐阅读