gpt4 book ai didi

c++ - 了解向 QML 公开 C++ 类型的属性

转载 作者:行者123 更新时间:2023-11-28 05:20:42 25 4
gpt4 key购买 nike

我想编写一个非常简单的代码来查找一个字符串,然后输出分配给它的变量。我想了解更多关于 C++ 和 QML 之间的通信。所以我想到了在 C++ 中使用 HashMap ,然后在 QML 中使用这些函数来列出结果。

我有很多错误,所以我基本上尝试了一切让它工作,现在我的代码可以工作了。但是有人可以帮助我理解我所做的事情吗。

我没有怀疑

  1. 我无法访问我的函数 loadItemList()findcubby() 但是当我包含 Q_OBJECT 宏时它就开始了为什么工作?
  2. 我在网上的一些代码中看到他们经常使用类似explicit Itemlist(QObject *parent = 0);为什么以及这是什么意思?
  3. 我已将我的 HashMap 定义为公共(public)变量,我知道这不好,有人可以告诉我如何处理私有(private) HashMap 。

这是我的头文件

#ifndef ITEMLIST_H
#define ITEMLIST_H
#include <QObject>
#include <QHash>
class Itemlist : public QObject
{
Q_OBJECT
public:
Itemlist();
Q_INVOKABLE int find_cubby(QString);
QHash<QString, int> my_itemlist;
};

这是cpp文件

#include "itemlist.h"
Itemlist::Itemlist()
{
my_itemlist["aaaa"]=1;
my_itemlist["bb"]=1;
my_itemlist["cc"]=1;
my_itemlist["dd"]=1;
my_itemlist["ee"]=2;
my_itemlist["ff"]=2;
my_itemlist["gg"]=3;
my_itemlist["hh"]=3;
my_itemlist["ii"]=3;

}

int Itemlist::find_cubby(QString Name)
{
if(my_itemlist.contains(Name))
{
return my_itemlist.value(Name);
}
else
{
return 4;
}

}

最佳答案

  1. Q_OBJECT 是必需的,因为它用作 moc 代码生成器的标记,以便为类创建运行时内省(introspection)数据。属性或 Q_INVOKABLE 等功能取决于该机制。

  2. explicit 是一个 C++ 关键字,用于将构造函数标记为不可用于隐式类型转换。通常,编译器可以使用可以用单个参数调用的构造函数在参数类型和该构造函数的类之间进行转换。

例如

class Foo
{
public:
Foo(int i) {}
};

void doSomething(Foo f) {}

doSomething(5);

编译器有一个整数5,需要一个Foo对象。 Foo 有一个接受 int 的构造函数,因此它可以将其用于自动类型转换。explicit Foo(int i) {} 删除了该选项,因此编译器将出错并退出,表示找不到 doSomething(int) 函数。

  1. 在您的类(class)中使用 private: 部分,就像您目前使用 public:
  2. 一样

关于c++ - 了解向 QML 公开 C++ 类型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579711/

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