gpt4 book ai didi

c++ - 从 C++ 更改 QML Listview 委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 01:09:46 25 4
gpt4 key购买 nike

我正在尝试从 C++ 更改 qml listview 的委托(delegate),但目前我坚持如何更改代表委托(delegate)属性的别名。

细节更新:我在单独的 qml 文件中有多个委托(delegate),在我的应用程序中有很多屏幕,每个屏幕都有不同的 ListView UI,我想要的是这样的:

将委托(delegate)文件名传递给 C++ 函数 >>> C++ 函数设置 listView 的委托(delegate)属性(或类似的东西)>>> listview 加载相应的委托(delegate)。

我的 qml 文件如下所示:

Item {
id: root
property alias listViewDelegate: listView.delegate

ListView{
id: listView
delegate: MyDelegate{} // I have MyDelegate.qml file, it's working well
model: listModel
}

// List model
MyListModel {
id: listModel
}
}

我尝试使用 setProperty() 方法从 C++ 更改 listViewDelegate 别名,但没有成功(实际上是错误)。

qmlObj->setProperty("listViewDelegate", componentDelegate);

如何实现?或者任何人都可以建议我更好的方法来实现它?谢谢!

最佳答案

我认为有更好的方法来做到这一点。

步骤:

1) 在 C++ 端创建一个模型。

class Model : public QObject {
Q_OBJECT
Q_PROPERTY(qint32 status READ status WRITE setStatus NOTIFY statusChanged)
public:
Model(QObject *parent = Q_NULLPTR);
...
}

2) 通过setContextProperty将模型对象传给qml

Model model;
engine.rootContext()->setContextProperty("model1", &model);

3) 在 Model.status 上绑定(bind)您的 ListView 委托(delegate)

ListView {
id: listview
anchors.fill: parent
spacing: 20
model: listmodel
delegate: model1.status === 0 ? delegate1 : delegate2
}

4) 现在您可以在 C++ 端通过 setStaus() 更改委托(delegate)。

model.setStatus(1);

关于c++ - 从 C++ 更改 QML Listview 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39481590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com