简体   繁体   English

如何集成c ++和qml。 无法使用QML中的属性

[英]How to integrate c++ and qml. Cannot use property from QML

Error: Cannot assign to non-existent property "setScale" 错误:无法分配给不存在的属性“ setScale”

This is my class. 这是我的课。

C++ header 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++ source 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 file 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
}

I trying use slider to change scale at Paint, but get error qrc:/Page1Form.ui.qml:64: Error: Cannot assign to non-existent property "setScale" F 我尝试使用滑块更改Paint的比例,但出现错误qrc:/Page1Form.ui.qml:64:错误:无法分配给不存在的属性“ setScale” F

drawScene.setScale should be drawScene.scale : the property is named scale . drawScene.setScale应该为drawScene.scale :该属性名为scale setScale is its setter. setScale是它的设置器。

scaleChanged should be a signal and you have to add it of your property (with NOTIFY ). scaleChanged应该是一个信号,您必须将其添加到您的属性中(使用NOTIFY )。 It will be emitted when the value of scale has changed. 比例值更改时将发出该信号。

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

slots:
void debugScale(int val);

And then: 接着:

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

void Scene::debugScale(int val)
{
qDebug()<<_val;
update();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM