gpt4 book ai didi

c++ - 如何从 QML 设置模型数据?

转载 作者:行者123 更新时间:2023-11-28 06:08:28 31 4
gpt4 key购买 nike

在 C++ 中,我们可以使用 QAbstractItemModel::setData() 来修改模型的数据。在互联网上搜索我只找到了如何从模型中读取数据以在委托(delegate)中显示它。还有一些添加和删除行的示例,但我找不到如何更改特定模型索引的数据。像这样的东西:

Slider {
onValueChanged: myModel.setData(0, {amount: value})
}

如何在 QML 中修改模型中的数据?

最佳答案

在我的项目中,我采用不同的方式从 QML 模型读取/写入数据我只是创建了两个 .qml 文件,一个用于显示,另一个是用于执行数据库操作的辅助文件,我创建了一个模型,它继承了 QAbstractItemModel 并向其添加了四个函数:

MyCustomObject * at(int index); // get an item to display

void reload(); // to notify QML view on update/delete

bool insert(MyCustomObject *p_myCustomObject); // insert an item in model or database

bool update(MyCustomObject *p_myCustomObject);// update an item to model or database

bool doDelete(int myCustomObjectID);// delete an item from model or database

然后我创建一个本地对象来读/写,当显示这些数据时,我从模型中填充本地对象值,当我想保存时,我将该对象写入数据库

将此属性添加到您的主显示类

property MyCustomObject myCustomObject : MyCustomObject{} // to read/write UI value ti/from it

这是一个帮助程序类,它读取 UI 值并向模型插入、更新或删除模型

注意:这个类是我的一个应用程序,尽管只是阅读它并修改它以满足您的需要

import QtQuick 2.0
import DOO.Commands.Son 1.0
import DOOTypes 1.0

QtObject {

// read ui values into local son
function readUIValues()
{
var v_son = SonFactory.createObject()
v_son.name = sonName.text
v_son.image = sonImage.picture
v_son.age = sonAge.text
v_son.entryDate = Date.fromLocaleDateString(Qt.locale(), sonEntryDate.text, "dd-MM-yyyy")
v_son.commingFrom = sonCommingFrom.text
v_son.disabilityKind.kind = sonDisabilityKind.currentIndex
v_son.caseDescription = sonCaseDescription.text

return v_son

}
// simple UI validation
function validateUIValues()
{
if(sonName.text == "") return false
if(sonImage.picture == "") return false
if(sonAge.text < 1 || sonAge.text > 100) return false
if(Date.fromLocaleDateString(Qt.locale(), sonEntryDate.text, "dd-MM-yyyy") == "Invalid Date") return false
if(sonCommingFrom.text == "") return false
if(sonDisabilityKind.text == "") return false
if(sonCaseDescription.text == "") return false

return true
}

// save or update a son into database
function save()
{

if (!validateUIValues())
{
dooNotifier.showMessage("خطأ","ليدك مدخلات غير صحيحة، يُرجى التأكد من إدخال قيم صحيحة")
return
}

var v_son = readUIValues()


if(disMode === DOO.CreateNew)
{
if(SonResultsModel.insert(v_son))
{
dooNotifier.showMessage("تم بنجاح","تم إضافة الابن بنجاح")
sonDisplay.hide()
}
else
{
dooNotifier.showMessage("فشل","فشل إضافة الابن")
DOOLogger.log(SonResultsModel.lasrErrorText())
}
}
else
{
//get the ID of the son bieng edited
v_son.sonID = son.sonID

if(SonResultsModel.update(v_son))
{
dooNotifier.showMessage("تم بنجاح","تم تحديث الابن بنجاح")
sonDisplay.hide()
}
else
{
dooNotifier.showMessage("فشل","فشل تحديث الابن")
DOOLogger.log(SonResultsModel.lasrErrorText())
}
}

v_son.destroy()
}

function doDelete(sonID)
{
if(SonResultsModel.doDelete(sonID)) {
dooNotifier.showMessage("تم بنجاح","تم حذف الابن بنجاح")
sonDisplay.hide()
}
else dooNotifier.showMessage("فشل","فشل حذف الابن")
}
}

这是我用来读取和写入数据库的方式,希望对您有所帮助

关于c++ - 如何从 QML 设置模型数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31860392/

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