Как интегрировать c ++ и qml.Невозможно использовать свойство из QML - PullRequest
0 голосов
/ 04 февраля 2019

Ошибка: невозможно присвоить несуществующему свойству "setScale"

Это мой класс.

Заголовок C ++

#include <QObject>
#include <QtQuick>

class Scene : public QQuickPaintedItem
{
Q_OBJECT
Q_PROPERTY(int scale READ scale WRITE setScale)
public:
Scene();
void scaleChanged(int _val);

int scale() const;
void setScale(const int &scale);

protected:
int m_scale;

};

Источник C ++

#include "Scene.h"

void Scene::scaleChanged(int _val)
{
m_scale = _val;
qDebug()<<_val;
update();
}

int Scene::scale() const
{
return m_scale;
}

void Scene::setScale(const int &scale)
{
m_scale = scale;
qDebug()<<scale;
}

Qml файл

 Rectangle {
    id: drawArea
    color: "#ffffff"
    Scene {
        id: drawScene
        anchors.fill: parent
        anchors.centerIn: parent
        scale: 1
    }
}

Slider {
    id: slider
    value: 1
    onMoved: drawScene.setScale = value
}

Я пытаюсь использовать ползунок для изменения масштаба в Paint, но получаю ошибку qrc: /Page1Form.ui.qml: 64: Ошибка: невозможно назначить несуществующее свойство "setScale"F

1 Ответ

0 голосов
/ 04 февраля 2019

drawScene.setScale должно быть drawScene.scale: свойство имеет имя scale.setScale является его установщиком.

scaleChanged должен быть сигналом, и вы должны добавить его в свою собственность (с помощью NOTIFY).Он будет излучаться при изменении значения шкала .

Q_PROPERTY(int scale READ scale WRITE setScale NOTIFY scaleChanged)
signals:
void scaleChanged(int val);

slots:
void debugScale(int val);

А затем:

QObject::connect(this, &Scene::valueChanged,
                     this, &Scene::debugScale);

void Scene::debugScale(int val)
{
qDebug()<<_val;
update();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...