c++ - 如何集成 c++ 和 qml。不能使用来自 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: Error: Cannot assign to non-existent property "setScale" F
解决方案
drawScene.setScale
应该是drawScene.scale
:该属性被命名scale
。setScale
是它的二传手。
scaleChanged
应该是一个信号,您必须将其添加到您的属性中(使用NOTIFY
)。当scale的值发生变化时,它将被发出。
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();
}
推荐阅读
- python - 访问字符串中的键:值
- r - 在 R 中,是否可以将没有观察但具有列名的空数据框写入 Excel 工作表?
- amazon-web-services - AWS MediaConvert 旋转纵横比已更改
- c# - AppDomains 和调试符号
- docker - docker exec -it bash 给出错误“在 $PATH 中找不到可执行文件”-但通过 Kitematic 启动 bash 有效
- vb.net - 使用VB隐藏DataGridView中的所有行
- sql - 更新语句不适用于循环
- codenameone - PropertyIndex.storeJSON("UserDB") 按 Properties 的相同顺序或字母顺序
- c# - 如何将 Azure Application Insights 限制为仅记录 dotnet 核心项目中的自定义事件?
- angular - 这是什么意思 []?