簡體   English   中英

了解將C ++類型的屬性公開給QML

[英]Understanding Exposing Attributes of C++ Types to QML

我想編寫一個非常簡單的代碼來查找字符串,然后輸出分配給它的變量。 我想了解有關C ++和QML之間通信的更多信息。 所以我想到了在C ++中使用哈希映射,然后在QML中使用這些函數列出結果。

我有很多錯誤,因此我基本上嘗試了所有方法使其正常工作,現在我的代碼可以正常工作了。 但是有人可以幫助我了解我的所作所為。

我毫不懷疑

  1. 我無法訪問我的函數loadItemList()findcubby()但是一旦包含了Q_OBJECT宏,它便開始工作,為什么?
  2. 我在網上的一些代碼中看到,他們經常使用諸如explicit Itemlist(QObject *parent = 0); 為什么以及這意味着什么?
  3. 我已經將我的哈希映射定義為公共變量,但我知道這不好,有人可以告訴我如何處理私有哈希映射。

這是我的頭文件

#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代碼生成器為類創建運行時自省數據的標記。 屬性或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. 就像您目前與public:一樣,在班級中使用private:部分public:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM