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

2023-11-27

再次,我有一个问题(也许是一个问题),我在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;
}

我使用列表视图和委托,查看时没有问题,但我的问题是我是否可以使用 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的实现中添加了一行代码。这是代码:

Before:

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

Now:

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

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

并且在实施中addConcept and removeConcept:

 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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用QQmlListProperty在Qml中显示和修改QList 的相关文章

随机推荐

  • Python 中的浏览文件或目录对话框

    我正在用 Python 做一个小项目 我想浏览文件或目录以获取它们的路径 我正在使用 Tkinter 但只能找到一个文件浏览器 filename tkFileDialog askopenfilename parent root title
  • Read.csv() 抛出错误

    我一直在尝试读取 Excel 文件 但似乎有问题 该文件以 Excel 格式存储在 Documents 文件夹中 这些是我收到的错误消息 table lt read csv file choose header T sep t Warnin
  • 使用 MongoDB 制作类似 Twitter 的时间线

    我需要的 假设您正在使用 MongoDB 并且有一个名为users 每个用户都有一个 以下 数组 其中包含 user id他所关注的人的信息 然后你就有了另一个收藏statuses 每个状态包含 id它的作者 如何向某个用户显示他所关注的人
  • Netty 4 中的缓冲区所有权:如何管理缓冲区生命周期?

    我一直在尝试编写一个 HTTP 客户端来同时获取多个提要 最多 1k 同时也是学习 Netty 4 的练习 我的问题是 是否有关于新 ByteBuf 基础设施如何工作的很好的解释 谁 拥有 它们 它们如何共享 是吗 ChannelPipel
  • 如何设置热图中的中心颜色

    我想在seaborn 中绘制热图 我的代码如下 plt rcParams font size 13 plt rcParams font weight bold my dpi 96 fig ax plt subplots figsize 80
  • C# 代表现实世界的用法 [重复]

    这个问题在这里已经有答案了 我之前问过一个关于委托的问题 是否有人有一个必须使用委托的场景 这如何改进我的 C 代码 正如我使用它的许多场景一样 我似乎总是能够围绕它进行编程 每当您使用策略模式或者观察者模式 委托使您的工作比使用接口更容易
  • 在没有 Apple Developer Program (Xcode 7) 的情况下在 iOS 上安装应用程序

    6 月 8 日 Apple 宣布通过 Xcode 7 每个人都可以在自己的设备上安装他们开发的任何应用程序 而无需 Apple 开发者计划证书 Apple 开发者网站称您只需使用 Apple ID 登录即可 我已经在 Xcode 上做到了这
  • GroupMe 如何验证我的号码?

    我正在开发一个 iPhone 应用程序 我需要用户的电话号码 根据我读到的内容 例如这里 在 iOS 中以编程方式获取自己的电话号码 设备的电话号码在您的应用程序容器中不可用 我总是让用户输入他或她自己的号码 但是 当我前几天加入 Grou
  • OpenCL 中零拷贝的访问路径

    我对零拷贝到底是如何工作的有点困惑 1 想要确认以下内容对应于opencl中的零复制 CPU SYSTEM RAM c3 X lt gt PCI E c2 X PCI E CPU directly accessing GPU memory
  • Heroku:如何部署客户端和服务器在不同端口上运行的节点应用程序?

    我有一个 Nodejs API 作为服务器 React Redux 应用程序作为客户端 位于一个 git 项目中 https github com lafisrap fcc nightlife git 我想使用 heroku cli 将其部
  • 非静态方法需要一个目标

    我有一个控制器操作 可以在本地和生产中的 Firefox 以及本地 IE 上正常工作 但不能在生产中的 IE 上工作 这是我的控制器操作 public ActionResult MNPurchase CalculationViewModel
  • maven 使用 --add-exports 运行和构建

    我尝试在 Win 10 计算机上使用 InteliJ 和 Maven 运行我的应用程序 如果我跑 mvn clean javafx run 我的 GUI 启动 但如果我使用 org controlsfx control textfield
  • 如何使用 gson/retrofit 获取对象数组?

    我之前用过gson自动转换为pojo的 但现在我尝试使用改造将 api 结果转换为对象 只要 json 具有命名对象数组 就没有问题 e g items name foo name bar public class AnItem Strin
  • R 闪亮的 DataTables ColVis 行为

    我得到了一个带有 DataTables 的 RStudio Shiny 服务器页面 并且我得到了 TableTools 和 ColReorder 在下面的示例中工作 但是 ColVis Show hide columns按钮 的行为方式与示
  • 永远的单子是如何工作的?

    永远的单子是如何工作的 forever Monad m gt m a gt m b forever a a gt gt forever a 如果我写 main forever putStrLn SAD I DON T UNDERSTAND
  • NSMutableAttributedString 的属性 NSStrikethroughStyleAttributeName 在 iOS8 中无法正常工作

    我有一个没有 NSStrikethroughStyleAttributeName 属性的可变属性字符串 如下所示 NSMutableAttributedString str1 NSMutableAttributedString alloc
  • 如何防止实体重叠?

    我正在尝试使用 RealityKit 创建 AR 体验 但我发现默认情况下 实体在通过用户交互移动时会相互移动并重叠 我想防止对象重叠并相互进入 这样当用户移动它们时 它们只是撞击 弹开而不会重叠 我从 RealityComposer 文件
  • 如何检查日期对象是否等于昨天?

    现在我正在使用这段代码 Calendar cal Calendar getInstance SimpleDateFormat sdf new SimpleDateFormat yyyy MM dd cal set cal get Calen
  • Visual Studio 2012 表示网站项目的项目文件是在环境之外编辑的

    安装 Visual Studio 2012 并从包含两个 网站 类型项目的 Team Foundation Server 打开 升级 Visual Studio 2010 解决方案后 我不断收到消息 项目 网站 已在环境外部修改 并且可以选
  • 使用QQmlListProperty在Qml中显示和修改QList

    再次 我有一个问题 也许是一个问题 我在qt5中使用qt和qml制作一个程序 并使用qtquick 2 0制作qml 我有一个C 模型qlist 我需要在运行时修改列表 我使用q QQmlListProperty 并显示 qml 中的项目