1

我有一个 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) 设为“私有”,因此不能从 QML 修改属性,但仍可以从 C++ 代码(在类内)设置?

4

1 回答 1

0

如果您不希望从 QML 修改它,则不要声明 WRITE,并创建一个方法,每次属性更改时都会发出信号,setter 方法可以是公共的或私有的,但无法访问在 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;
};
于 2020-03-13T17:08:23.860 回答