【发布时间】:2017-01-10 22:39:46
【问题描述】:
我想编写一个非常简单的代码,它查找一个字符串,然后输出分配给它的变量。 我想更多地了解 C++ 和 QML 之间的通信。所以我想到了在 C++ 中使用哈希映射,然后在 QML 中使用这些函数来列出结果。
我有很多错误,所以我基本上尝试了一切以使其正常工作,现在我的代码可以正常工作。但是有人可以帮助我了解我所做的事情。
我有几个疑问
- 我无法访问我的函数
loadItemList()和findcubby(),但是一旦我包含了Q_OBJECT宏,它就开始工作了,为什么? - 我在网上的一些代码中看到他们经常使用
explicit Itemlist(QObject *parent = 0);之类的东西,这是为什么?这是什么意思? - 我已将我的 Hash 映射定义为公共变量,我知道这不好,有人可以告诉我如何处理私有哈希映射。
这是我的头文件
#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;
}
}
【问题讨论】:
-
这些都是基本问题。如果您不想在 Qt 文档中查看
Q_OBJECT的用途,Google 中关于它的前 2 个结果是 SO 问题,分别名为“Q_OBJECT 宏做什么?为什么所有 Qt 对象都需要这个宏?”和“什么时候应该使用 Q_OBJECT?”。如果您搜索“显式 c++”,情况也是如此。只需将您的哈希设置为您班级的私有成员,您的代码仍然可以在这里工作。