使用Q_Property显示属性

时间:2017-05-18 05:12:44

标签: c++ qt qobject qproperty

我有一个显示树架构的GUI,如下所示。

enter image description here

这些节点中的每一个都是从它们上面的节点派生的单独类。所有这些都继承了QObject的实现。 现在,当用户在Properties的右键菜单下选择Implicit时,我需要添加一些属性。选择此选项将打开一个包含属性的窗口。 我在Implicit的头文件中添加了这些属性,如下所示:

#ifndef FCIMPLICIT_H
#define FCIMPLICIT_H
#include <QObject>
#include "Interface.h"
#include "ResourceItem.h"
#include "MonWindow.h"
#include "FCTab.h"
#include "ResourceItem.h"
#include "FCAbstract.h"
#include "FCInterface.h"
#include "FCConnections.h"
class CFCImplicit: public CResourceItem
{

    Q_OBJECT
    Q_PROPERTY(int FCPortID READ getPortID )
    Q_PROPERTY(QString Type READ getType )
    Q_PROPERTY(QString Status READ getStat )    
    Q_PROPERTY(int WWNodeNumber READ getNodeNo )
    Q_PROPERTY(int WWPortNumber READ getPortNo )
    Q_PROPERTY(bool AutoActive READ getAuto )
public:
    CFCImplicit(QObject*);
    ~CFCImplicit();

    QString                 getType();
    QString                 getStat();
    int                     getPortID();
    int                     getPortNo();
    int                     getNodeNo();
    bool                    getAuto();


};

FCinterface.hFCASM节点的标头。

问题是只显示第一个属性,如第二张图片所示。有没有理由发生这种情况?我应该在构造函数或新函数中添加一些内容吗?

Implicit类的构造函数是

CFCImplicit::CFCImplicit(QObject* parent) : CResourceItem(parent)
{

    fnSetProperty("objectName", QString("Implicit"));   
    ((CResourceItem*)parent)->fnAddResources(this);

}

编辑:

这是所有READ函数的代码

QString CFCImplicit::getType()
{
QString a;
a="Implicit";
return a;
}

QString CFCImplicit::getStat()
{QString a;
a="Idle";
return a;}

int CFCImplicit::getPortID()
{int a;
a=1;
return a;}

int CFCImplicit::getPortNo()
{int a;
a=2;
return a;}

int CFCImplicit::getNodeNo()
{int a;
a=2;
return a;}

bool CFCImplicit::getAuto()
{bool a;
a=true;
return a;}

2 个答案:

答案 0 :(得分:0)

我发现了我做错了什么。我假设由于属性是只读的,我只需要一个READ访问器函数。通过添加WRITE访问者并添加所需的WRITE函数,可以显示属性。我并不完全理解为什么需要这种条件(可能只有READ才能使属性可用于内省),但它有效!你去吧。

快乐编码每个人!

答案 1 :(得分:0)

无需添加READ和函数,您可以使用MEMBER直接访问变量。