У меня есть графический интерфейс, отображающий древовидную архитектуру, как показано здесь.
Каждый из этих узлов — это отдельные классы, производные от узла над ними. Все они наследуют 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;}
Я узнал, что я делаю не так. Я предположил, что, поскольку свойства были только для чтения, мне нужно было только READ
функция доступа. Добавляя WRITE
доступ и добавление необходимого WRITE
функции, свойства были отображены. Я не совсем понимаю, почему это условие требуется (может быть, просто READ
просто делает свойства доступными для самоанализа), но это сработало! Итак, поехали.
Удачного кодирования всем!
Нет необходимости добавлять READ и функцию, вы можете использовать MEMBER, чтобы иметь прямой доступ к переменной.