Q_PROPERTY 与私人 setter
Q_PROPERTY with private setter
我有一个 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(setRo_text) "private",所以 属性 不能从 QML 修改,但仍然可以从 C++ 代码设置(在class里面)?
如果您不想从 QML 修改它,则不要声明 WRITE,并创建一个方法,每次 属性 更改时它都会发出信号,setter method 可以是 public 或 private 但它不能在 QML
中访问
class C: public QObject{
Q_OBJECT
Q_PROPERTY(QString ro_text READ ro_text NOTIFY ro_textChanged)
public:
C(QObject *parent=nullptr): QObject(parent){
}
QString ro_text() const {
return m_ro_text;
}
Q_SIGNALS:
void ro_textChanged();
private:
void setRo_text(const QString & text){
if(m_ro_text == text)
return;
m_ro_text = text;
Q_EMIT ro_textChanged();
}
QString m_ro_text;
};
我有一个 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(setRo_text) "private",所以 属性 不能从 QML 修改,但仍然可以从 C++ 代码设置(在class里面)?
如果您不想从 QML 修改它,则不要声明 WRITE,并创建一个方法,每次 属性 更改时它都会发出信号,setter method 可以是 public 或 private 但它不能在 QML
中访问class C: public QObject{
Q_OBJECT
Q_PROPERTY(QString ro_text READ ro_text NOTIFY ro_textChanged)
public:
C(QObject *parent=nullptr): QObject(parent){
}
QString ro_text() const {
return m_ro_text;
}
Q_SIGNALS:
void ro_textChanged();
private:
void setRo_text(const QString & text){
if(m_ro_text == text)
return;
m_ro_text = text;
Q_EMIT ro_textChanged();
}
QString m_ro_text;
};