Использование Q_Property для отображения свойств

У меня есть графический интерфейс, отображающий древовидную архитектуру, как показано здесь.

введите описание изображения здесь

Каждый из этих узлов — это отдельные классы, производные от узла над ними. Все они наследуют 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.h заголовок FCASM узел.

Проблема в том, что отображается только первое свойство, как видно на втором рисунке. Есть ли причина, почему это происходит? Я должен добавить что-то в конструктор или новую функцию?

Конструктор для 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;}

0

Решение

Я узнал, что я делаю не так. Я предположил, что, поскольку свойства были только для чтения, мне нужно было только READ функция доступа. Добавляя WRITE доступ и добавление необходимого WRITE функции, свойства были отображены. Я не совсем понимаю, почему это условие требуется (может быть, просто READ просто делает свойства доступными для самоанализа), но это сработало! Итак, поехали.

Удачного кодирования всем!

0

Другие решения

Нет необходимости добавлять READ и функцию, вы можете использовать MEMBER, чтобы иметь прямой доступ к переменной.

0

По вопросам рекламы [email protected]