我想将 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"));