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

时间:2019-02-04 18:21:09

标签: c++ qt qml

错误:无法分配给不存在的属性“ 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 :(得分:0)

var app = angular.module('myApp', []); app.controller('myCtrl', function($scope, $window) { $scope.viewDetail = function(dataItem) { var id = dataItem.id; $window.open('/'+vm.detailRoute+'/'+id); }; }); 应该为drawScene.setScale:该属性命名为drawScene.scalescale是它的设置者。

setScale应该是一个信号,您必须将其添加到您的媒体资源中(使用scaleChanged)。当 scale 的值更改时将发出该信号。

NOTIFY

然后:

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

slots:
void debugScale(int val);