我想编写一个非常简单的代码来查找字符串,然后输出分配给它的变量。 我想更多地了解C ++和QML之间的通信。所以我想在C ++中使用哈希映射,然后在QML中使用这些函数来列出结果。
我有很多错误,所以我基本上尝试了一切使它工作,现在我的代码工作。但有人可以帮助我理解我所做的事情。
我很怀疑
loadItemList()
和findcubby()
但是只要我加入Q_OBJECT
宏,它就开始工作了吗?explicit Itemlist(QObject *parent = 0);
的原因,这是什么意思?这是什么意思?这是我的头文件
#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;
}
}
答案 0 :(得分:1)
Q_OBJECT
是必要的,因为它用作moc
代码生成器的标记,以便为类创建运行时内省数据。属性或Q_INVOKABLE
等功能取决于该机制。
explicit
是一个C ++关键字,它将构造函数标记为不可用于隐式类型转换。通常,编译器可以使用可以使用单个参数调用的构造函数在参数类型和该构造函数的类之间进行转换。
E.g。
class Foo
{
public:
Foo(int i) {}
};
void doSomething(Foo f) {}
doSomething(5);
编译器有一个整数5
,需要一个Foo
对象。 Foo
有一个构造函数,它接受一个int,因此它可以用它来进行自动类型转换。
explicit Foo(int i) {}
删除了该选项,因此编译器将退出并显示错误,并说它无法找到doSomething(int)
函数。
private:
部分,就像您目前使用public: