Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有私有setter的Q_属性_C++_Qt_Qml_Qt Quick_Qproperty - Fatal编程技术网

C++ 具有私有setter的Q_属性

C++ 具有私有setter的Q_属性,c++,qt,qml,qt-quick,qproperty,C++,Qt,Qml,Qt Quick,Qproperty,我有一个QObject,其属性可从QML访问。 比如: Class C : public QObject { Q_OBJECT public: explicit C(QObject * parent = nullptr); Q_PROPERTY(QString ro_text READ ro_text WRITE setRo_text NOTIFY ro_textChanged) }; 是否有可能使SETter(StRojType)“私有”,所以属性不能从QML修改,但仍然可以从C++代码(类

我有一个QObject,其属性可从QML访问。 比如:

Class C : public QObject {
Q_OBJECT
public:
explicit C(QObject * parent = nullptr);
Q_PROPERTY(QString ro_text READ ro_text WRITE setRo_text NOTIFY ro_textChanged)
};

是否有可能使SETter(StRojType)“私有”,所以属性不能从QML修改,但仍然可以从C++代码(类内)设置?

< P>如果您不希望它从QML修改,那么不要声明写,并且创建一个方法,每次属性改变它发出信号,setter方法可以是public或private,但不能在QML中访问

C类:公共QObject{
Q_对象
Q_属性(QString ro_文本读取ro_文本通知ro_文本更改)
公众:
C(QObject*parent=nullptr):QObject(parent){
}
QString ro_text()常量{
返回m_ro_文本;
}
Q_信号:
void ro_textChanged();
私人:
无效设置文本(常量字符串和文本){
if(m_ro_text==text)
返回;
m_ro_text=文本;
Q_EMIT ro_textChanged();
}
QString m_ro___文本;
};

如果不希望从QML修改它,那么不要声明写操作,并创建一个方法,该方法在每次属性更改时发出信号,setter方法可以是public或private,但不能在QML中访问

C类:公共QObject{
Q_对象
Q_属性(QString ro_文本读取ro_文本通知ro_文本更改)
公众:
C(QObject*parent=nullptr):QObject(parent){
}
QString ro_text()常量{
返回m_ro_文本;
}
Q_信号:
void ro_textChanged();
私人:
无效设置文本(常量字符串和文本){
if(m_ro_text==text)
返回;
m_ro_text=文本;
Q_EMIT ro_textChanged();
}
QString m_ro___文本;
};

没错,但这样我就不能使用setProperty(…)来修改它。@Martin为什么必须使用setProperty?我正在尝试围绕生成的QDBusAbstractInterface派生类创建一个包装器(它似乎不支持发出“-Changed”为它的属性发出信号。我正在重新实现包装器中的属性,并希望在基线属性更改时更新它们(我通过不同的机制以QMap的形式收到通知…“名称”->“新值”)。因此,我希望动态访问属性(以节省键入时间,减少错误)@Martin为什么不让QDBusAbstractInterface成为C类成员,然后只公开这些属性。我想你有一个XY problemExtension意味着没有隐藏。所以不要隐藏:)这是真的,但那样我就不能使用setProperty(…)修改它。@Martin为什么需要使用setProperty?我正在尝试围绕生成的QDBusAbstractInterface派生类创建一个包装器(它似乎不支持为其属性发出“-Changed”信号。我正在重新实现包装器中的属性,并希望在基线属性更改时更新它们(我通过不同的机制以QMap…“name”->“new value”)的形式收到通知。因此,我希望访问属性dynamicali(这样可以节省键入时间,减少错误)@Martin为什么不让QDBusAbstractInterface成为C类成员,然后只公开这些属性。我想你有一个XY问题扩展意味着没有隐藏。所以不要隐藏:)