Q_PROPERTY с приватным сеттером - PullRequest
1 голос
/ 13 марта 2020

У меня есть 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 ++ (внутри класса)?

1 Ответ

0 голосов
/ 13 марта 2020

если вы не хотите, чтобы он был изменен из QML, не объявляйте WRITE и создайте метод, который при каждом изменении свойства выдает сигнал, метод setter может быть опубликован c или закрытым, но к нему нельзя получить доступ в 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;
};
...