簡體   English   中英

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

[英]How to integrate c++ and qml. Cannot use property from 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

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM