gpt4 book ai didi

c++ - 在Qml中使用QQmlListProperty显示和修改QList

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:53 28 4
gpt4 key购买 nike

再次,我有一个问题(也许是一个问题),我用 qt5 中的 qt 和 qml 和 qtquick 2.0 中的 qml 制作了一个程序,我有一个 c++ 模型 qlist,我需要在运行时修改列表,我使用 q QQmlListProperty 并在 qml 中显示项目,但在接下来添加或删除代码时它们不会隐藏和显示:

class ConceptsList: public QObject{ 

Q_OBJECT
Q_PROPERTY(QQmlListProperty<Concept> concepts READ concepts NOTIFY conceptsChanged)
Q_CLASSINFO("DefaultProperty", "concepts")

public:
ConceptsList(QObject *parent=0);

QQmlListProperty<Concept> concepts();
Q_INVOKABLE static void append_concept(QQmlListProperty<Concept> *list, Concept *cpt);

Q_INVOKABLE void removeConcept(int index);
Q_INVOKABLE void addConcept(QString m_id,QString description, QString quantity, QString price, QString unit, QString total);

Q_INVOKABLE int countConcepts();

static void clearConcepts(QQmlListProperty<Concept> *property);
static int conceptsSize(QQmlListProperty<Concept> *property);
static Concept *conceptAt(QQmlListProperty<Concept> *property, int index);

signals:
void conceptsChanged();

private:
QList<Concept *> m_concepts;
}

我使用 ListView 和委托(delegate),我没有问题可以查看,但我的问题是我是否可以使用 QQmlListProperty 并修改 Qlist,或者我将更改一个表单以将 qlist 公开给 qml,如果可能如何调用来自 qml 的方法,或者如何在 C++ 中实现,我问,因为这种形式的工作数量或示例真的很少。在 qml 中我的代码是下一个:

    ConceptsList{
id:cpts
concepts:[
Concept{
m_id:"7"
m_quantity: "3"
m_price: "1"
m_unit:"1"
m_description:"algo"
m_total:"2"
}
]
}

ListView {
id: listConceptsView
objectName: "list"
anchors.fill: parent
anchors.margins: 5
clip: true
focus: true
highlight: highlightBar
highlightFollowsCurrentItem: false


Component{
id: tableConceptDelegate

Item{
anchors.margins: 4
width: 515
height: 27
clip: true

Row {
spacing: 4

Text {
height: 26; width: 76
text: model.m_id
color: "black"
font.bold: true
horizontalAlignment: Text.AlignHCenter
}
...

...

Text {
height: 26; width: 120
text: model.m_total//amountTotal
color: "black"
font.bold: true
horizontalAlignment: Text.AlignHCenter
}
}

MouseArea {
id: mouse_area1
anchors.fill: parent
onClicked:
{
listConceptsView.currentIndex = index
}
}
}

}

delegate: tableConceptDelegate
model:cptCpt // i define this alias how cptCpt: cpt.concepts
}

最佳答案

我自己得到了答案,首先,我停止在方法append_concept中使用属性Q_INVOCABLE,其次,我在addConcept的实现中添加了一行代码。这是代码:

之前:

Q_INVOKABLE static void append_concept(QQmlListProperty<Concept> *list, Concept *cpt);

现在:

static void append_concept(QQmlListProperty<Concept> *list, Concept *cpt);

也许这不影响,但我宁愿不要冒险。

addConceptremoveConcept 的实现中:

 void ConceptsList::addConcept(QString m_id, QString quantity, QString price, QString unit, QString description)
{
Concept *cpt=new Concept(m_id, quantity, unit, price, description);

m_concepts.append(cpt);
this->conceptsChanged();
}

void ConceptsList::removeConcept(int index)
{
m_concepts.removeAt(index);
this->conceptsChanged();
}

关于c++ - 在Qml中使用QQmlListProperty显示和修改QList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19284547/

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