【发布时间】:2017-04-09 00:33:07
【问题描述】:
我正在为我的 QML 视图 使用自定义模型,并且我希望能够通过拖放来移动项目。
我在我的 cpp 模型中使用一个列表来设置数据,然后我将我的模型绑定到 QML view。
但是,当我将一个项目放到一个新位置时,视图要求模型将项目移动到新位置。
为此,我只需使用函数dataList.move(oldIndexPosition, newIndexPosition) 来更新我的dataList。
我的 dataList 已正确更新,但不会刷新 QML 视图。
我尝试使用信号emit dataChanged(),但它仍然没有刷新视图。
我不明白我该怎么办,有什么建议吗?
这是我尝试做的一个简单示例。注意这里没有拖拽,为了更容易理解:
public:
Q_INVOKABLE void move(int oldIndex, int newIndex) {
dataList.move(oldIndex,newIndex);
emit dataChanged(this->index(oldIndex),this->index(newIndex));
}
signals:
void dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight);
model.h
int main(int argc, char ** argv)
{
QGuiApplication app(argc, argv);
Model model;
model.addSomeData("data1");
model.addSomeData("data2");
model.addSomeData("data3");
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
QQmlContext *ctxt = view.rootContext();
ctxt->setContextProperty("myModel", &model);
view.setSource(QUrl("qrc:view.qml"));
view.show();
return app.exec();
}
main.cpp
ListView {
width: 200; height: 250
model: myModel
delegate: Text { text: "data " + data }
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
myModel.move(0,2) //Just a test
}
}
}
myqml.qml
如果您对我做错了什么有任何想法,那您能帮助我真是太好了!非常感谢。
【问题讨论】:
-
对不起,我错过了这个帖子!