[英]Understanding Exposing Attributes of C++ Types to QML
我想編寫一個非常簡單的代碼來查找字符串,然后輸出分配給它的變量。 我想了解有關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;
}
}
Q_OBJECT
是必需的,因為它用作moc
代碼生成器為類創建運行時自省數據的標記。 屬性或Q_INVOKABLE
取決於該機制。
explicit
是一個C ++關鍵字,它將構造函數標記為不可用於隱式類型轉換。 通常,編譯器可以使用可以使用單個參數調用的構造函數在參數類型和該構造函數的類之間進行轉換。
例如
class Foo
{
public:
Foo(int i) {}
};
void doSomething(Foo f) {}
doSomething(5);
編譯器的整數為5
,並且需要一個Foo
對象。 Foo
有一個采用int的構造函數,因此可以將其用於自動類型轉換。 explicit Foo(int i) {}
刪除了該選項,因此編譯器將退出並顯示錯誤,表示找不到doSomething(int)
函數。
public:
一樣,在班級中使用private:
部分public:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.